Parcelable
ve Bundle
nesneleri şu şekilde tasarlanmalıdır:
IPC/Binder gibi işlem sınırları arasında kullanılır
işlemleri, amaca sahip etkinlikler arasında ve yapılandırma genelinde geçici durumu depolamak için
anlamına gelir. Bu sayfada, Arkadaş Bitkiler projesinin
Parcelable
ve Bundle
nesne.
Not: Parcel
, genel amaçlı bir metin değildir
çok önemlidir; başka hiçbir zaman
Parcel
verilerini diskte depolayın veya ağ üzerinden gönderin.
Etkinlikler arasında veri gönderme
Bir uygulama, kullanılacak Intent
nesnesi oluşturduğunda
Yeni bir Etkinlik başlatırken startActivity(android.content.Intent)
,
mobil cihazlardan
parametrelerini putExtra(java.lang.String, java.lang.String)
kullanarak
yöntemidir.
Aşağıdaki kod snippet'i, bu işlemin nasıl gerçekleştirileceğine dair bir örnek göstermektedir.
Kotlin
val intent = Intent(this, MyActivity::class.java).apply { putExtra("media_id", "a1b2c3") // ... } startActivity(intent)
Java
Intent intent = new Intent(this, MyActivity.class); intent.putExtra("media_id", "a1b2c3"); // ... startActivity(intent);
İşletim sistemi, niyetin temel Bundle
öğesini paketler. Daha sonra işletim sistemi
yeni etkinlik
verileri ayrıştırır ve niyeti yeni etkinliğe iletir.
OS tarafından bilinen temel öğeleri ayarlamak için Bundle
sınıfını kullanmanızı öneririz
Intent
nesne. Bundle
sınıfı yüksek
marshalling ve unmarshalling için optimize edilmiş ürünlerdir.
Bazı durumlarda, bileşik veya karmaşık nesneleri etkinliklere göndermek için bir mekanizmaya ihtiyaç duyabilirsiniz.
Bu gibi durumlarda, özel sınıf Parcelable özelliğini uygulamalı ve
writeToParcel(android.os.Parcel, int)
yöntemini çağırın.
Ayrıca, CREATOR
adında boş olmayan bir alan da sağlamalıdır.
Parcelable.Creator
arayüzünü uygular ve
createFromParcel()
yöntemi, Parcel
öğesini tekrar geçerli nesneye dönüştürmek için kullanılır.
Daha fazla bilgi için
Parcelable
nesnesinin referans belgelerine bakın.
Niyet aracılığıyla veri gönderirken veri boyutunu birkaç KB ile sınırlandırmaya dikkat etmeniz gerekir.
Çok fazla veri göndermek, sistemin
TransactionTooLargeException
istisna.
İşlemler arasında veri gönderme
İşlemler arasında veri göndermek, etkinlikler arasında gerçekleştirilen işleme benzer. Ancak,
özel parseller kullanmamanızı öneririz. Özel bir istek gönderirseniz
Parcelable
bir uygulamadan diğerine aktarmak için,
özel sınıfın tam olarak aynı sürümünü
hem gönderen hem de alan uygulamalarda
kullanılır. Bu, ortak bir kitaplık olup
her iki uygulamada da kullanılıyor. Uygulamanız
Çünkü sistem, bilgisi olmayan bir sınıfı serbest bırakamaz.
Örneğin, bir uygulama
AlarmManager
sınıfını ekleyin ve özel bir Parcelable
kullanın
karar vermemiz gerekir. Alarm çaldığında sistem, niyetin
Eklenecek Bundle
ekstra var
tekrarlama sayısı. Bu değişiklik, sistemin özel
Ekstralar arasından Parcelable
. Bu çıkarım, sonuçta uygulamanın
uygulama bunu beklediği için, değiştirilen alarm amacını aldığında kilitlenir
yeni verileri alabilirsiniz.
Bağlayıcı işlem arabelleğinin boyutu şu anda 1 MB olmak üzere sınırlı bir sabit boyuta sahiptir ve işlem olarak tanımlanmıştır. Bu sınır süreç boyunca düzeyinde değil de belirli bir düzeyde olması durumunda, bu işlemler ve sistemle kurulan etkileşimler gibi stratejik destek sağlar. Boyut sınırı aşıldığında bir TransactionTooLargeException hatası verilir.
SaveInstanceState durumu için veri miktarı küçük tutulmalıdır. Çünkü sistem işlemi kullanıcı tarafından sağlandığı sürece sağlanan verileri kullanıcıları bu etkinliğe geri dönebilir (etkinlik işlemi sonlandırılsa bile). Kayıtlı durumu en fazla 50.000 veriyle saklamanızı öneririz.
Not: Android 7.0 (API düzeyi 24) ve sonraki sürümlerde sistem TransactionTooLargeException'ı kullandı. Android'in önceki sürümlerinde sistem yalnızca logcat'te bir uyarı gösterir.