Çeşitli Android sistem işlemleri, parçanızın durumunu etkileyebilir. Android çerçevesi, kullanıcının durumunun kaydedildiğinden emin olmak için otomatik olarak parçaları ve arka yığını kaydedip geri yükler. Bu nedenle, kontrol etmeniz gerekir.
Aşağıdaki tabloda parçanızın kaybolmasına neden olan işlemler özetlenmektedir durum bilgisi ve çeşitli durum türlerinin bu anlamına gelir. Tabloda belirtilen eyalet türleri şunlardır:
- Değişkenler: parçadaki yerel değişkenler.
- Görünüm Durumu: Parçadaki bir veya daha fazla görünüme ait herhangi bir veri.
- SavedState: Bu parça örneğinde bulunan ve kaydedilmesi gereken veriler
onSaveInstanceState()
içinde. - NonConfig: Sunucu veya yerel alan gibi harici bir kaynaktan alınan veriler veri deposu veya kullanıcı tarafından oluşturulan ve kaydedildikten sonra sunucuya gönderilen veriler.
Değişkenler çoğu zaman SavedState ile aynı şekilde ele alınır, ancak aşağıdaki tabloda, bu ikisi arasındaki farkları görebilirsiniz: irdeleyelim.
İşlem | Değişkenler | Görünüm Durumu | Kaydedilen Durum | Yapılandırılmamış |
---|---|---|---|---|
Arka gruba eklendi | ✓ | ✓ | x | ✓ |
Yapılandırma Değişikliği | x | ✓ | ✓ | ✓ |
Ölüm/Eğlence Süreci | x | ✓ | ✓ | ✓* |
Kaldırıldı, arka gruba eklenmedi | x | x | x | x |
Düzenleyen tarafından tamamlandı | x | x | x | x |
* NonConfig durumu, ViewModel için Kayıtlı Durum modülü.
Tablo 1: Çeşitli parçalara zarar veren işlemler ve bunların etkileri farklı eyalet türlerinde olabilir.
Bir örnek verelim. Örneğin, yüksek kaliteye sahip
rastgele dizeyi TextView
içinde görüntüler ve düzenleme seçeneği sunar.
dizeyi arkadaşınıza göndermeden önce eklemeniz gerekir:
Bu örnekte, kullanıcı düzenle düğmesine bastıktan sonra,
uygulamada, kullanıcının mesajı düzenleyebileceği bir EditText
görünümü gösteriliyor. Öğe
kullanıcı İPTAL'i tıkladığında EditText
görünümü temizlenir ve
görünürlük View.GONE
olarak ayarlandı. Böyle
sorunsuz bir sorunsuz deneyim sunabilmemiz için
dört veri parçası yönetimi gerekebilir.
deneyim:
Veri | Tür | Durum türü | Açıklama |
---|---|---|---|
seed |
Long |
Yapılandırılmamış | Rastgele yeni bir şey oluşturmak için kullanılan çekirdek. Oluşturulma zamanı
ViewModel oluşturulur. |
randomGoodDeed |
String |
SavedState + Değişken | Parça ilk kez oluşturulduğunda oluşturulur.
randomGoodDeed , kullanıcıların şunları görmesini sağlamak için kaydedilir:
aynı tesadüfen yapılan, ancak bu tür işlemler
rekreasyon. |
isEditing |
Boolean |
SavedState + Değişken | Kullanıcı düzenlemeye başladığında Boole işareti true olarak ayarlandı.
isEditing , düzenleme kısmının tamamlandığından emin olmak için
parça yeniden oluşturulduğunda ekran görünür kalır. |
Düzenlenen metin | Editable |
Eyaleti Görüntüle (sahibi: EditText ) |
EditText görünümündeki düzenlenmiş metin.
EditText görünümü, kullanıcının
ve devam etmekte olan değişiklikler kaybolmaz. |
Tablo 2: Rastgele metin oluşturma aracı uygulamasının yönetmesi gerektiğini belirtir.
Aşağıdaki bölümlerde, verilerinizin durumunu doğru şekilde nasıl yöneteceğiniz açıklanmaktadır. tarafından yıkıcı işlemler yaparak yürütülmesidir.
Durumu göster
Görünümler kendi durumlarını yönetmekten sorumludur. Örneğin,
görünümün kullanıcı girişini kabul etmesi nedeniyle, kaydetmek ve geri yüklemek görünümün
bu girdiyi kullanabilirsiniz. Tüm Android çerçevesi tarafından sağlanan
görünümlerinin kendi onSaveInstanceState()
uygulaması vardır ve
onRestoreInstanceState()
olduğundan, içinde görünüm durumunu yönetmeniz gerekmez
oluşturun.
Örneğin, önceki senaryoda, düzenlenen dize
EditText
. EditText
bilir
görüntülenen metnin değerini ve
Başlangıcı ve sonu var.
Görünümlerin durumunu korumak için kimlik gerekir. Bu kimlik parçasını ve görünüm hiyerarşisini ele alacağız. Kimliği olmayan görünümler saklanamaz kontrol edebilir.
<EditText android:id="@+id/good_deed_edit_text" android:layout_width="match_parent" android:layout_height="wrap_content" />
Tablo 1'de belirtildiği gibi, görünümlerde ViewState
kaydedilip geri yüklenir.
parçayı kaldırmayan veya ana makineyi yok etmeyen tüm işlemler.
SavedState
Parçanız, az miktarda dinamik durumu yönetmekten sorumludur
parçanın çalışma şekline
bağlı olan öğelerdir. Şunları saklayabilirsiniz:
seri hâlindeki verileri
hazırlamak için
Fragment.onSaveInstanceState(Bundle)
.
Şuna benzer:
Activity.onSaveInstanceState(Bundle)
Pakete yerleştirdiğiniz veriler, yapılandırma değişiklikleri ile saklanır
ve onun parçası olan parçanızın
kendisinde kullanılabilir.
onCreate(Bundle)
,
onCreateView(LayoutInflater, ViewGroup, Bundle)
,
ve
onViewCreated(View, Bundle)
yöntemlerine göz atın.
Önceki örnekten devam edelim. randomGoodDeed
,
kullanıcıya gösterilir (isEditing
),
parçası EditText
öğesini gösterir veya gizler. Bu kayıtlı durum aşağıdaki gibi olmalıdır:
aşağıda gösterildiği gibi onSaveInstanceState(Bundle)
kullanılarak devam ettirilmiştir
örnek:
Kotlin
override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.putBoolean(IS_EDITING_KEY, isEditing) outState.putString(RANDOM_GOOD_DEED_KEY, randomGoodDeed) }
Java
@Override public void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean(IS_EDITING_KEY, isEditing); outState.putString(RANDOM_GOOD_DEED_KEY, randomGoodDeed); }
onCreate(Bundle)
işlemindeki durumu geri yüklemek için depolanan değeri şuradan alın:
paket:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) isEditing = savedInstanceState?.getBoolean(IS_EDITING_KEY, false) randomGoodDeed = savedInstanceState?.getString(RANDOM_GOOD_DEED_KEY) ?: viewModel.generateRandomGoodDeed() }
Java
@Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { isEditing = savedInstanceState.getBoolean(IS_EDITING_KEY, false); randomGoodDeed = savedInstanceState.getString(RANDOM_GOOD_DEED_KEY); } else { randomGoodDeed = viewModel.generateRandomGoodDeed(); } }
Tablo 1'de belirtildiği gibi, parçası arka yığına yerleştirilir. Bunları kayıtlı durum olarak ele almak tüm yıkıcı operasyonlarda ısrarcı olabilirler.
Yapılandırılmamış
NonConfig verileri, parçanızın dışına (ör.
ViewModel
. Önceki
örnekte, seed
(NonConfig durumumuz) ViewModel
içinde oluşturulmuştur.
Durumunu koruma mantığı ViewModel
öğesine aittir.
Kotlin
public class RandomGoodDeedViewModel : ViewModel() { private val seed = ... // Generate the seed private fun generateRandomGoodDeed(): String { val goodDeed = ... // Generate a random good deed using the seed return goodDeed } }
Java
public class RandomGoodDeedViewModel extends ViewModel { private Long seed = ... // Generate the seed private String generateRandomGoodDeed() { String goodDeed = ... // Generate a random good deed using the seed return goodDeed; } }
ViewModel
sınıfı, doğası gereği verilerin yapılandırmada hayatta kalmasına izin verir.
ve diğer modlar arasında geçiş yaparak
hafızada kalmaya devam eder.
arka yığına yerleştirilir. Süreçteki ölüm ve yeniden rekreasyon
ViewModel
yeniden oluşturulur ve yeni bir seed
oluşturulur. Bu makale için
SavedState
modülü
eklemek ViewModel
için ViewModel
basit durumu
ve yeniden canlandırma sürecidir.
Ek kaynaklar
Parça durumunu yönetme hakkında daha fazla bilgi için aşağıdakilere bakın ek kaynaklar.
Codelab'ler
- Yaşam Döngüsüne Duyarlı Bileşenler codelab'i