1. Hoş Geldiniz
Bu pratik codelab'i, Ünite 1: Android Geliştirici Temelleri (Sürüm 2) kursuna başlarken Ünite 1'in bir parçasıdır. Codelab'leri sırasıyla uygulayarak bu kurstan en yüksek değeri elde edersiniz:
- Kurstaki codelab'lerin tam listesi için Codelabs for Android Developer Fundamentals (V2) kod laboratuvarları sayfasına bakın.
- Tüm kavram bölümleri, uygulamalar ve slaytların bağlantıları da dahil olmak üzere kursla ilgili ayrıntılar için Android Developer Fundamentals'a (Sürüm 2) bakın.
Giriş
Bu pratikte aktivite yaşam döngüsü hakkında daha fazla bilgi edineceksiniz. Yaşam döngüsü, bir etkinliğin oluşturulduğu andan yok edildiği ve sistemin kaynaklarını geri kazandığı ana kadar, tüm kullanım ömrü boyunca bulunabileceği durumlar kümesidir. Kullanıcı, uygulamanızdaki etkinlikler arasında gezinirken (ayrıca uygulamanızın içinde ve dışında) etkinlikler de yaşam döngülerinde farklı durumlar arasında geçiş yapar.
Bir etkinliğin yaşam döngüsündeki her aşamaya karşılık gelen bir geri çağırma yöntemi vardır: onCreate(), onStart(), onPause() vb. Bir etkinlik durumu değiştiğinde, ilişkili geri çağırma yöntemi çağrılır. Şu yöntemlerden birini zaten görmüştünüz: onCreate(). Etkinlik sınıflarınızdaki yaşam döngüsü geri çağırma yöntemlerinden herhangi birini geçersiz kılarak etkinliğin kullanıcı veya sistem işlemlerine yanıt olarak varsayılan davranışını değiştirebilirsiniz.
Etkinlik durumu, cihaz yapılandırma değişikliklerine bağlı olarak da (örneğin, kullanıcı cihazı dikey konumdan yatay konuma döndürdüğünde) değişebilir. Bu yapılandırma değişiklikleri gerçekleştiğinde, etkinlik kaldırılır ve varsayılan durumunda yeniden oluşturulur. Ayrıca kullanıcı etkinliğe girdiği bilgileri kaybedebilir. Kullanıcılarınızın aklını karıştırmamak için uygulamanızı beklenmedik veri kayıplarını önleyecek şekilde geliştirmeniz gerekir. Bu uygulamanın ilerleyen bölümlerinde yapılandırma değişiklikleriyle denemeler yapıp bir etkinliğin durumunu cihaz yapılandırma değişikliklerine ve diğer etkinlik yaşam döngüsü etkinliklerine göre nasıl koruyacağınızı öğreneceksiniz.
Bu pratikte TwoEvents uygulamasına günlük ifadeleri ekler ve uygulamayı kullanırken etkinlik yaşam döngüsündeki değişiklikleri gözlemlersiniz. Ardından bu değişikliklerle çalışmaya ve bu koşullar altında kullanıcı girişinin nasıl ele alınacağını keşfetmeye başlarsınız.
Ön koşullar
Şunları yapabileceksiniz:
- Android Studio'da bir uygulama projesi oluşturun ve çalıştırın.
- Uygulamanıza günlük ifadeleri ekleyin ve bu günlükleri Logcat bölmesinde görüntüleyin.
- Bir Etkinlik ve Amaç hakkında bilgi edinip bunlarla çalışın ve bunlarla rahatça etkileşim kurun.
Neler Öğreneceksiniz?
- Etkinlik yaşam döngüsünün işleyiş şekli.
- Bir Etkinlik başladığında, duraklatıldığında, durdurulduğunda ve silindiğinde.
- Etkinlik değişiklikleriyle ilişkili yaşam döngüsü geri çağırma yöntemleri hakkında.
- Etkinlik yaşam döngüsü olaylarına neden olabilecek işlemlerin (ör. yapılandırma değişiklikleri) etkisi.
- Yaşam döngüsü olayları genelinde Etkinlik durumunu koruma.
Yapacaklarınız
- Günlük ifadelerini içerecek şekilde çeşitli Activity yaşam döngüsü geri çağırmalarını uygulamak için önceki uygulamada bulunan TwoActivities uygulamasına kodu ekleyin.
- Uygulamanız çalışırken ve uygulamanızdaki her Etkinlik ile etkileşimde bulunurken durum değişikliklerini gözlemleyin.
- Cihazdaki kullanıcı davranışına veya yapılandırma değişikliğine yanıt olarak beklenmedik bir şekilde yeniden oluşturulan bir Etkinliğin örnek durumunu korumak için uygulamanızı değiştirin.
2. Uygulamaya genel bakış
Bu pratikte TwoActivities uygulamasını eklersiniz. Uygulama, yaklaşık olarak son codelab'deki gibi görünür ve davranır. İki Etkinlik uygulaması içerir ve kullanıcıya bunlar arasında mesaj gönderme olanağı tanır. Bu pratikte uygulamada yaptığınız değişiklikler, uygulamanın görünür kullanıcı davranışını etkilemez.
3. 3. 1. Görev: Twoactivity'a yaşam döngüsü geri çağırmaları ekleme
Bu görevde, bu yöntemler çağrıldığında iletileri logcat'e yazdırmak için tüm Etkinlik yaşam döngüsü geri çağırma yöntemlerini uygulayacaksınız. Bu günlük mesajları, Etkinlik yaşam döngüsü durumunun ne zaman değiştiğini ve bu yaşam döngüsü durumundaki değişikliklerin, uygulamanızı çalışırken nasıl etkilediğini görmenizi sağlar.
1.1 (İsteğe Bağlı) TwoEvents projesini kopyalama
Bu uygulamadaki görevler için son uygulamada oluşturduğunuz mevcut TwoActivities projesini değiştireceksiniz. Önceki TwoEtkinlikler projesini olduğu gibi tutmayı tercih ederseniz, projenin bir kopyasını oluşturmak için Ek: Yardımcı Programlar'daki adımları uygulayın.
1.2 MainActivity'ye geri çağırma uygulama
- Android Studio'da TwoEvents projesini, ardından Proje > Android bölmesinde MainActivity'yi açın.
- onCreate() yöntemine aşağıdaki günlük ifadelerini ekleyin:
Log.d(LOG_TAG, "-------");
Log.d(LOG_TAG, "onCreate");
- onStart() geri çağırması için bir geçersiz kılma ekleyin ve söz konusu etkinliğin günlüğüne bir ifade ekleyin:
@Override
public void onStart(){
super.onStart();
Log.d(LOG_TAG, "onStart");
}
Kısayol için, Android Studio'da Kod > Geçersiz Kılma Yöntemlerini seçin. Sınıfınızda geçersiz kılabileceğiniz tüm yöntemlerin bulunduğu bir iletişim kutusu açılır. Listeden bir veya daha fazla geri çağırma yöntemi seçildiğinde, bu yöntemler için üst sınıfa gerekli çağrı da dahil olmak üzere eksiksiz bir şablon eklenir.
- onStart() yöntemini şablon olarak kullanarak onPause(), onRedirect(), onResume(), onStop() ve onDestroy() yaşam döngüsü geri çağırmalarını uygulayın
Tüm geri çağırma yöntemleri aynı imzalara sahiptir (ad hariç). Bu diğer geri çağırma yöntemlerini oluşturmak için onStart()'ı Kopyalayıp Yapıştırırsanız, içeriği üst sınıfta doğru yöntemi çağıracak şekilde güncellemeyi ve doğru yöntemi günlüğe kaydetmeyi unutmayın.
- Uygulamanızı çalıştırın.
- Logcat bölmesini göstermek için Android Studio'nun alt kısmındaki Logcat sekmesini tıklayın. Etkinliğin başladığı andan itibaren geçişinin gerçekleştiği üç yaşam döngüsü durumunu gösteren üç günlük mesajı görürsünüz:
D/MainActivity: -------
D/MainActivity: onCreate
D/MainActivity: onStart
D/MainActivity: onResume
1.3 SecondActivity'de yaşam döngüsü geri çağırmalarını uygulama
MainActivity için yaşam döngüsü geri çağırma yöntemlerini uyguladığınıza göre, aynı işlemi SecondActivity için de yapın.
- SecondActivity'yi açın.
- Sınıfın en üstüne, LOG_TAG değişkeni için bir sabit değer ekleyin:
private static final String LOG_TAG = SecondActivity.class.getSimpleName();
- İkinci Etkinliğe yaşam döngüsü geri çağırmalarını ve günlük ifadelerini ekleyin. (Geri çağırma yöntemlerini MainActivity'den kopyalayıp yapıştırabilirsiniz.)
- ReturnReply() yöntemine, final() yönteminin hemen öncesine bir günlük ifadesi ekleyin:
Log.d(LOG_TAG, "End SecondActivity");
1.4 Uygulama çalışırken günlüğü gözlemleme**
- Uygulamanızı çalıştırın.
- Logcat bölmesini göstermek için Android Studio'nun alt kısmındaki Logcat sekmesini tıklayın.
- Arama kutusuna Activity yazın. Android logcat çok uzun ve karmaşık olabilir. Her bir sınıftaki LOG_TAG değişkeni MainActivity veya SecondActivity kelimelerini içerdiğinden, bu anahtar kelime, günlüğü yalnızca ilgilendiğiniz şeyler için filtrelemenize olanak tanır.
Uygulamanızı kullanarak denemeler yapın ve farklı işlemlere yanıt olarak ortaya çıkan yaşam döngüsü olaylarına dikkat edin. Özellikle şunları deneyin:
- Uygulamayı normal bir şekilde kullanın (mesaj gönderin, başka bir mesajla yanıt verin).
- İkinci Etkinlik'ten ana Etkinlik'e geri dönmek için Geri düğmesini kullanın.
- İkinci Etkinlik'ten ana Etkinlik'e geri dönmek için uygulama çubuğundaki Yukarı oku kullanın.
- Cihazı uygulamanızdaki farklı zamanlarda hem ana hem de ikinci Etkinlik'te döndürün, günlükte ve ekranda neler olduğunu gözlemleyin.
- Genel bakış düğmesine (Ana Ekran'ın sağındaki kare düğme) basın ve uygulamayı kapatın (X'e dokunun).
- Ana ekrana dönün ve uygulamanızı yeniden başlatın.
İPUCU: Uygulamanızı bir emülatörde çalıştırıyorsanız Control+F11 veya Control+Function+F11 tuşlarıyla döndürme simülasyonu yapabilirsiniz.
Görev 1 çözüm kodu
Aşağıdaki kod snippet'leri ilk görevin çözüm kodunu göstermektedir.
MainActivity
Aşağıdaki kod snippet'leri MainActivity'ye eklenen kodu gösterir ancak sınıfın tamamını göstermez.
onCreate() yöntemi:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Log the start of the onCreate() method.
Log.d(LOG_TAG, "-------");
Log.d(LOG_TAG, "onCreate");
// Initialize all the view variables.
mMessageEditText = findViewById(R.id.editText_main);
mReplyHeadTextView = findViewById(R.id.text_header_reply);
mReplyTextView = findViewById(R.id.text_message_reply);
}
Diğer yaşam döngüsü yöntemleri:
@Override
protected void onStart() {
super.onStart();
Log.d(LOG_TAG, "onStart");
}
@Override
protected void onPause() {
super.onPause();
Log.d(LOG_TAG, "onPause");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(LOG_TAG, "onRestart");
}
@Override
protected void onResume() {
super.onResume();
Log.d(LOG_TAG, "onResume");
}
@Override
protected void onStop() {
super.onStop();
Log.d(LOG_TAG, "onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(LOG_TAG, "onDestroy");
}
SecondActivity
Aşağıdaki kod snippet'leri SecondActivity'de eklenen kodu gösterir ancak sınıfın tamamını göstermez.
SecondActivity sınıfının en üstünde:
private static final String LOG_TAG = SecondActivity.class.getSimpleName();
ReturnReply() yöntemi:
public void returnReply(View view) {
String reply = mReply.getText().toString();
Intent replyIntent = new Intent();
replyIntent.putExtra(EXTRA_REPLY, reply);
setResult(RESULT_OK, replyIntent);
Log.d(LOG_TAG, "End SecondActivity");
finish();
}
Diğer yaşam döngüsü yöntemleri:
Yukarıdaki MainActivity ile aynıdır.
4. 4. 2. Görev: Etkinlik örneği durumunu kaydetme ve geri yükleme
Sistem kaynaklarına ve kullanıcı davranışına bağlı olarak, uygulamanızdaki her Etkinlik yok edilebilir ve düşündüğünüzden çok daha sık bir şekilde yeniden oluşturulabilir.
Son bölümde cihazı veya emülatörü döndürdüğünüzde bu davranışı fark etmiş olabilirsiniz. Cihazın döndürülmesi, cihaz yapılandırma değişikliğine bir örnektir. En sık yapılan değişiklik rotasyon olsa da tüm yapılandırma değişiklikleri mevcut Etkinliğin kaldırılmasına ve yeniymiş gibi yeniden oluşturulmasına neden olur. Kodunuzda bu davranışı hesaba katmazsanız bir yapılandırma değişikliği gerçekleştiğinde Etkinlik düzeniniz varsayılan görünümüne ve ilk değerlerine geri dönebilir ve kullanıcılarınız yerlerini, verilerini veya uygulamanızdaki ilerleme durumunu kaybedebilir.
Her bir Etkinliğin durumu, Paket nesnesinde Etkinlik örneği durumu adı verilen anahtar/değer çiftleri kümesi olarak depolanır. Sistem, Etkinlik durdurulmadan hemen önce örnek durum Paketine varsayılan durum bilgilerini kaydeder ve geri yüklenmesi için bu Paketi yeni Etkinlik örneğine geçirir.
Beklenmedik bir şekilde yok edilip yeniden oluşturulan bir Etkinlikteki verilerin kaybedilmesini önlemek için onSaveInstanceState() yöntemini uygulamanız gerekir. Etkinliğin yok edilmesi ve yeniden oluşturulması olasılığı olduğunda, sistem bu yöntemi Etkinliğinizde (onPause() ile onStop() arasında) çağırır.
Örnek durumunda kaydettiğiniz veriler, mevcut uygulama oturumu sırasında yalnızca söz konusu etkinliğin bu örneğine özeldir. Yeni bir uygulama oturumunu durdurup yeniden başlattığınızda, Etkinlik örneğinin durumu kaybolur ve Etkinlik, varsayılan görünümüne geri döner. Uygulama oturumları arasında kullanıcı verilerini kaydetmeniz gerekiyorsa paylaşılan tercihler veya veritabanı kullanın. Daha sonraki bir uygulamada bunların her ikisini de öğreneceksiniz.
2.1 Etkinlik örneği durumunu onSaveInstanceState() ile kaydetme
Cihazı döndürmenin, ikinci Etkinliğin durumunu hiç etkilemediğini fark etmiş olabilirsiniz. Bunun nedeni, ikinci Etkinlik düzeni ve durumunun, düzenden ve onu etkinleştiren Intent'ten oluşturulmasıdır. Etkinlik yeniden oluşturulsa bile Intent hâlâ mevcut olur ve ikinci Etkinlik'teki onCreate() yöntemi her çağrıldığında bu Intent'teki veriler kullanılmaya devam eder.
Ayrıca, her Etkinlik'te, mesaja veya yanıt EditText öğelerine yazdığınız metinlerin, cihaz döndürüldüğünde bile korunduğunu görebilirsiniz. Bunun nedeni, düzeninizdeki bazı View öğelerinin durum bilgilerinin yapılandırma değişiklikleri sırasında otomatik olarak kaydedilmesi ve bir EditText'in geçerli değerinin bu durumlardan biri olmasıdır.
Dolayısıyla ilgilendiğiniz tek Etkinlik durumu, yanıt başlığı için TextView öğeleri ve ana Etkinlik'teki yanıt metnidir. Her iki TextView öğesi de varsayılan olarak görünmez; yalnızca ikinci Etkinlikten ana Etkinlik'e bir mesaj gönderdiğinizde görünür.
Bu görevde onSaveInstanceState() işlevini kullanarak bu iki TextView öğesinin örnek durumunu korumak için bir kod ekleyeceksiniz.
- MainActivity'yi açın.
- onSaveInstanceState() işlevinin bu iskelet uygulamasını Etkinliğe ekleyin veya bir iskelet geçersiz kılması eklemek için Kod > Geçersiz Kılma Yöntemlerini kullanın.
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
- Başlığın görünür durumda olup olmadığını kontrol edin. Görünür durumdaysa bu görünürlük durumunu putBoolean() yöntemi ve "reply_visible" anahtarı kullanarak durum paketine yerleştirin.
if (mReplyHeadTextView.getVisibility() == View.VISIBLE) {
outState.putBoolean("reply_visible", true);
}
İkinci Etkinlikten bir yanıt gelene kadar yanıt başlığının ve metninin görünmez olarak işaretlendiğini unutmayın. Üstbilgi görünür durumdaysa kaydedilmesi gereken yanıt verileri vardır. Yalnızca görünürlük durumuyla ilgilendiğimizi unutmayın. Başlık metninin kaydedilmesi gerekmez çünkü bu metin hiçbir zaman değişmez.
- Aynı kontrolün içine, yanıt metnini Pakete ekleyin.
outState.putString("reply_text",mReplyTextView.getText().toString());
Üstbilgi görünür durumdaysa yanıt iletisinin de görünür olduğunu varsayabilirsiniz. Yanıt iletisinin görünürlük durumunu test etmeniz veya kaydetmeniz gerekmez. Yalnızca iletinin gerçek metni, "reply_text" anahtarıyla durum paketine gider.
Yalnızca Etkinlik oluşturulduktan sonra değişebilecek Görünüm öğelerinin durumunu kaydedersiniz. Uygulamanızdaki diğer View öğeleri (EditText, Düğme), varsayılan düzenden herhangi bir zamanda yeniden oluşturulabilir.
Sistemin, EditText içeriği gibi bazı View öğelerinin durumunu kaydedeceğini unutmayın.
2.2 onCreate() işlevinde Etkinlik örneği durumunu geri yükleme
Etkinlik örneği durumunu kaydettikten sonra, Etkinlik yeniden oluşturulduğunda bu durumu da geri yüklemeniz gerekir. Bunu onCreate() ile veya Etkinlik oluşturulduktan sonra onStart() sonrasında çağrılan onRestoreInstanceState() geri çağırmasını uygulayarak yapabilirsiniz.
Durum da dahil olmak üzere kullanıcı arayüzünün mümkün olan en kısa sürede kullanılabilir olmasını sağlamak için, Etkinlik durumunu geri yüklemek için çoğu zaman onCreate() yöntemini kullanmanız daha iyi olur. Bazen tüm başlatma işlemi tamamlandıktan sonra bunu onRestoreInstanceState() içinde yapmak veya alt sınıfların varsayılan uygulamanızı kullanıp kullanmayacağınıza karar vermesine izin vermek bazen kullanışlı olur.
- onCreate() yönteminde, View değişkenleri findViewById() ile başlatıldıktan sonra, savedInstanceState'in boş olmadığından emin olmak için bir test ekleyin.
// Initialize all the view variables.
mMessageEditText = findViewById(R.id.editText_main);
mReplyHeadTextView = findViewById(R.id.text_header_reply);
mReplyTextView = findViewById(R.id.text_message_reply);
// Restore the state.
if (savedInstanceState != null) {
}
Etkinliğiniz oluşturulduğunda sistem, durum Paketini tek bağımsız değişkeni olarak onCreate() öğesine iletir. onCreate() ilk kez çağrıldığında ve uygulamanız başlatıldığında Paket boş olur. Uygulamanız ilk kez başlatıldığında mevcut bir durum olmaz. onCreate() için yapılan sonraki çağrılarda, onSaveInstanceState() işlevinde depoladığınız verilerle doldurulmuş bir paket bulunur.
- Bu kontrolün içinde, "reply_visible" anahtarıyla Paketten mevcut görünürlüğü (true veya false) alın.
if (savedInstanceState != null) {
boolean isVisible =
savedInstanceState.getBoolean("reply_visible");
}
- isvisible değişkeni için önceki satırın altına bir test ekleyin.
if (isVisible) {
}
Bundle durumunda bir response_visible anahtarı varsa (ve isVisible anahtarı doğru ise) durumu geri yüklemeniz gerekir.
- isvisible testinde başlığı görünür yapın.
mReplyHeadTextView.setVisibility(View.VISIBLE);
- Paketten "reply_text" anahtarıyla kısa yanıt mesajını alın ve TextView yanıtını bu dizeyi gösterecek şekilde ayarlayın.
mReplyTextView.setText(savedInstanceState.getString("reply_text"));
- Yanıt TextView'u da görünür hale getirin:
mReplyTextView.setVisibility(View.VISIBLE);
- Uygulamayı çalıştırın. Etkinlik yeniden oluşturulduktan sonra yanıt mesajının (varsa) ekranda kaldığından emin olmak için cihazı veya emülatörü döndürmeyi deneyin.
Görev 2 çözüm kodu
Aşağıdaki kod snippet'leri bu görevin çözüm kodunu göstermektedir.
MainActivity
Aşağıdaki kod snippet'leri MainActivity'ye eklenen kodu gösterir ancak sınıfın tamamını göstermez.
onSaveInstanceState() yöntemi:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// If the heading is visible, message needs to be saved.
// Otherwise we're still using default layout.
if (mReplyHeadTextView.getVisibility() == View.VISIBLE) {
outState.putBoolean("reply_visible", true);
outState.putString("reply_text",
mReplyTextView.getText().toString());
}
}
onCreate() yöntemi:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(LOG_TAG, "-------");
Log.d(LOG_TAG, "onCreate");
// Initialize all the view variables.
mMessageEditText = findViewById(R.id.editText_main);
mReplyHeadTextView = findViewById(R.id.text_header_reply);
mReplyTextView = findViewById(R.id.text_message_reply);
// Restore the saved state.
// See onSaveInstanceState() for what gets saved.
if (savedInstanceState != null) {
boolean isVisible =
savedInstanceState.getBoolean("reply_visible");
// Show both the header and the message views. If isVisible is
// false or missing from the bundle, use the default layout.
if (isVisible) {
mReplyHeadTextView.setVisibility(View.VISIBLE);
mReplyTextView.setText(savedInstanceState
.getString("reply_text"));
mReplyTextView.setVisibility(View.VISIBLE);
}
}
}
Projenin tamamı:
Android Studio Projesi: TwoActivitiesLifecycle
5. Kodlama
Zorluk: Kullanıcının oluşturduğu liste için bir ana etkinlik ve en çok kullanılan alışveriş ürünlerinin listesi için ikinci bir etkinlik içeren basit bir alışveriş listesi uygulaması oluşturun.
- Ana etkinlik, on boş TextView öğesinden oluşmalıdır. Oluşturulacak listeyi içermelidir.
- Ana etkinlikteki Öğe Ekle düğmesi, genel alışveriş ürünlerinin (Peynir, Pirinç, Elma vb.) listesini içeren ikinci bir etkinliği başlatır. Öğeleri görüntülemek için Düğme öğelerini kullanın.
- Bir öğe seçildiğinde kullanıcı ana etkinliğe döndürülür ve boş bir TextView seçilen öğeyi içerecek şekilde güncellenir.
Bir Etkinlikten diğerine bilgi aktarmak için bir Intent'i kullanma. Kullanıcı cihazı döndürdüğünde alışveriş listesinin mevcut durumunun kaydedildiğinden emin olun.
6. Özet
- Etkinlik yaşam döngüsü, bir Etkinliğin aktarıldığı durum grubudur. Etkinlik ilk oluşturulduğunda ve Android sistemi söz konusu Etkinlik için kaynakları geri istediğinde sona erer.
- Kullanıcı bir Etkinlikten diğerine ve uygulamanızın içinde ve dışında gezinirken her Etkinlik, Etkinlik yaşam döngüsü içindeki durumlar arasında hareket eder.
- Etkinlik yaşam döngüsündeki her durumun, Etkinlik sınıfınızda geçersiz kılabileceğiniz bir geri çağırma yöntemi vardır.
- Yaşam döngüsü yöntemleri şunlardır: onCreate(), onStart(), onPause(), onRedirect(), onResume(), onStop(), onDestroy().
- Yaşam döngüsü geri çağırma yöntemini geçersiz kılmak, Etkinliğiniz bu duruma geçtiğinde oluşan bir davranış eklemenize olanak tanır.
- Android Studio'da Kod > Geçersiz Kıl seçeneğini kullanarak sınıflarınıza iskelet geçersiz kılma yöntemleri ekleyebilirsiniz.
- Döndürme gibi cihaz yapılandırması değişiklikleri, etkinliğin kaldırılmasına ve yeniymiş gibi yeniden oluşturulmasına neden olur.
- Yapılandırma değişikliğinde, EditText öğelerinin geçerli değerleri de dahil olmak üzere Etkinlik durumunun bir kısmı korunur. Diğer tüm veriler için söz konusu verileri açık bir şekilde sizin kaydetmeniz gerekir.
- Etkinlik örneği durumunu onSaveInstanceState() yöntemine kaydedin.
- Örnek durumu verileri bir Paket içinde basit anahtar/değer çiftleri olarak depolanır. Pakete veri yerleştirmek ve verileri Paketten geri almak için Paket yöntemlerini kullanın.
- Örnek durumunu, tercih edilen yöntem olan onCreate() veya onRestoreInstanceState() yöntemiyle geri yükleyin. Geri