Ayrıştırılabilir öğeler ve paketler

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.