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.