İzlenecek Yol - Etkinlik durumunu kaydetme
Etkinlik Yaşam Döngüsü kılavuzunda tasarruf durumunun arkasındaki teoriyi ele aldık; Şimdi bir örneği inceleyelim.
Etkinlik Durumu İzlenecek Yolu
şimdi ActivityLifecycle_Start projesini açalım, oluşturalım ve çalıştıralım. Bu, etkinlik yaşam döngüsünü ve çeşitli yaşam döngüsü yöntemlerinin nasıl çağrıldığını göstermek için iki etkinliği olan çok basit bir projedir. Uygulamayı başlattığınızda ekranı MainActivity
görüntülenir:
Durum Geçişlerini Görüntüleme
Bu örnekteki her yöntem, etkinlik durumunu belirtmek için IDE uygulama çıkış penceresine yazar. (Visual Studio'da çıkış penceresini açmak içinCTRL-ALT-O; çıkış penceresini Mac için Visual Studio açmak için, Tuş Takımı Uygulama Çıkışını >Görüntüle'ye > tıklayın.)
Uygulama ilk kez başlatıldığında, çıkış penceresinde Etkinlik A'nın durum değişiklikleri görüntülenir:
[ActivityLifecycle.MainActivity] Activity A - OnCreate
[ActivityLifecycle.MainActivity] Activity A - OnStart
[ActivityLifecycle.MainActivity] Activity A - OnResume
Etkinlik B'yi Başlat düğmesine tıkladığımızda, Etkinlik B'nin durum değişiklikleri sırasında Etkinlik A'nın duraklayıp duracağını görürüz:
[ActivityLifecycle.MainActivity] Activity A - OnPause
[ActivityLifecycle.SecondActivity] Activity B - OnCreate
[ActivityLifecycle.SecondActivity] Activity B - OnStart
[ActivityLifecycle.SecondActivity] Activity B - OnResume
[ActivityLifecycle.MainActivity] Activity A - OnStop
Sonuç olarak, Etkinlik B başlatılır ve Etkinlik A yerine görüntülenir:
Geri düğmesine tıkladığımızda, Etkinlik B yok edilir ve Etkinlik A sürdürülür:
[ActivityLifecycle.SecondActivity] Activity B - OnPause
[ActivityLifecycle.MainActivity] Activity A - OnRestart
[ActivityLifecycle.MainActivity] Activity A - OnStart
[ActivityLifecycle.MainActivity] Activity A - OnResume
[ActivityLifecycle.SecondActivity] Activity B - OnStop
[ActivityLifecycle.SecondActivity] Activity B - OnDestroy
Tıklama Sayacı Ekleme
Ardından, uygulamayı değiştirerek kaç kez tıklandığını sayan ve görüntüleyen bir düğme oluşturacağız. İlk olarak, öğesine MainActivity
bir _counter
örnek değişkeni ekleyelim:
int _counter = 0;
Şimdi Resource/layout/Main.axml düzen dosyasını düzenleyelim ve kullanıcının düğmeye kaç kez tıkladığını gösteren yeni clickButton
bir ekleyelim. Elde edilen Main.axml aşağıdakine benzemelidir:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="@+id/myButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/mybutton_text" />
<Button
android:id="@+id/clickButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/counterbutton_text" />
</LinearLayout>
'de OnCreate yönteminin MainActivity
sonuna aşağıdaki kodu ekleyelim. Bu kod, öğesinden clickButton
tıklama olaylarını işler:
var clickbutton = FindViewById<Button> (Resource.Id.clickButton);
clickbutton.Text = Resources.GetString (
Resource.String.counterbutton_text, _counter);
clickbutton.Click += (object sender, System.EventArgs e) =>
{
_counter++;
clickbutton.Text = Resources.GetString (
Resource.String.counterbutton_text, _counter);
} ;
Uygulamayı yeniden derleyip çalıştırdığımızda, her tıklamada değerini _counter
artıran ve görüntüleyen yeni bir düğme görüntülenir:
Ancak cihazı yatay moda döndürdüğünüzde bu sayı kaybolur:
Uygulama çıkışını incelediğimizde, Etkinlik A'nın dikey moddan yatay moda dönüş sırasında duraklatıldığını, durdurulduğunu, yok edildiğini, yeniden oluşturulduğu, yeniden başlatıldığını ve ardından sürdürüldüğünü görüyoruz:
[ActivityLifecycle.MainActivity] Activity A - OnPause
[ActivityLifecycle.MainActivity] Activity A - OnStop
[ActivityLifecycle.MainActivity] Activity A - On Destroy
[ActivityLifecycle.MainActivity] Activity A - OnCreate
[ActivityLifecycle.MainActivity] Activity A - OnStart
[ActivityLifecycle.MainActivity] Activity A - OnResume
Cihaz döndürüldüğünde Etkinlik A yok edildiğinden ve yeniden oluşturulursa örnek durumu kaybolur. Ardından, örnek durumunu kaydetmek ve geri yüklemek için kod ekleyeceğiz.
Örnek Durumunu Korumak için Kod Ekleme
Örnek durumunu kaydetmek için öğesine MainActivity
bir yöntem ekleyelim. Etkinlik A yok edilmeden önce Android otomatik olarak OnSaveInstanceState'i çağırır ve örnek durumumuzu depolamak için kullanabileceğimiz bir Paket'i geçirir. Tıklama sayımızı tamsayı değeri olarak kaydetmek için kullanalım:
protected override void OnSaveInstanceState (Bundle outState)
{
outState.PutInt ("click_count", _counter);
Log.Debug(GetType().FullName, "Activity A - Saving instance state");
// always call the base implementation!
base.OnSaveInstanceState (outState);
}
Etkinlik A yeniden oluşturulduğunda ve devam ettirildiğinde, Android bunu Bundle
yöntemimize OnCreate
geri geçirir. Şimdi geçirilen Bundle
değerinden _counter
değerini geri yüklemek için öğesine kod OnCreate
ekleyelim. Aşağıdaki kodu, tanımlandığı clickbutton
satırın hemen önüne ekleyin:
if (bundle != null)
{
_counter = bundle.GetInt ("click_count", 0);
Log.Debug(GetType().FullName, "Activity A - Recovered instance state");
}
Uygulamayı yeniden derleyip çalıştırın, ardından ikinci düğmeye birkaç kez tıklayın. Cihazı yatay moda döndürdüğünüzde sayı korunur!
Şimdi ne olduğunu görmek için çıkış penceresine göz atalım:
[ActivityLifecycle.MainActivity] Activity A - OnPause
[ActivityLifecycle.MainActivity] Activity A - Saving instance state
[ActivityLifecycle.MainActivity] Activity A - OnStop
[ActivityLifecycle.MainActivity] Activity A - On Destroy
[ActivityLifecycle.MainActivity] Activity A - OnCreate
[ActivityLifecycle.MainActivity] Activity A - Recovered instance state
[ActivityLifecycle.MainActivity] Activity A - OnStart
[ActivityLifecycle.MainActivity] Activity A - OnResume
OnStop yöntemi çağrılmadan önce, değerini bir Bundle
içinde kaydetmek _counter
için yeni OnSaveInstanceState
yöntemimiz çağrıldı. Android yöntemimizi OnCreate
çağırdığında bunu Bundle
bize geri aktardı ve değeri bıraktığımız yere geri yüklemek _counter
için kullanabildik.
Özet
Bu kılavuzda, durum verilerini korumak için Etkinlik Yaşam Döngüsü bilgilerimizi kullandık.