2012-08-24 25 views
5

'a geçirilenler yeniden oluşturulur. Intent BundleExtra aracılığıyla oluşturduğumda Etkinliğime bir ileti gönderirim. Şimdi, activity lifecycle numaralı telefona baktığımda, etkinliğim durduğunda (onStop), başka bir uygulamanın uygulama süreci öldürülmesi için belleğe ihtiyacı var, ardından kullanıcı etkinliğe gider (onCreate). Son onCreate geçtiğim orijinal booleanmı içerir mi? Boolean'ın kurtarılmasını istediğimi düşünürsem, OnSaveInstanceState numaralı telefona kaydetmem gerekecek, doğru mu?Bir aktivite durdurulursa, getIntent()

cevap

2

I (dokümanlardan) Bu nedenle o OnPause kalıcı verileri kaydetmek için önemli olduğunu

Not() onSaveInstanceState (Bundle) yerine ikinci parçası olmadığı için için OnPause() kullanırsınız yaşam döngüsü geri aramalarının, bu nedenle belgelerinde açıklanan her durumda çağrılmaz.

sonra onCreate() örneğin tekrar geri okuma veritabanı veya başka kaynaktan sen onu saklanan

Yani bağlı ne kadar önemli boolean değeri istediğiniz tasarruf mekanizmasının kullanacaktır olduğunu .. kalıcı devlet için:. Böyle basit metinler olarak http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState

Ve UI devlet için bir Özet olarak Saving Android Activity state using Save Instance State

:, seçimleri burada açıklanan gibi onSaveInstanceState kullanmak süreç öldürüldü boolean = gitmiş saklanmaz eğer :)

+0

Mükemmel. Özet olarak tam olarak aradığım şey. Aslında bu boolean'ın gitmesini istiyorum, böylece onCreate'ın – jsb

1

Ma uno V. Eğer gerçeği onSaveInstanceState (Bundle paket) Mevcut örneği devleti kaydetmek için tasarlanmıştır edilir()

OnPause ile gitmelidir senin durumunda, haklı. Uygulamanız öldürüldüğünde Yani, kaydedilen paket de

Sen boole'sini kaydetmek için SharedPreferences kullanabilirsiniz:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); 
sharedPreferences.edit().putBoolean("hiBoolean", booleanValue).commit(); 

Ve onCreate üzerine almak: Aslında

Boolean hiBoolean = sharedPreferences.getBoolean("hiBoolean", true); 
+0

'dan çağrıldığını izleyebilirim. Bu doğru değil. Uygulamanızı barındıran süreç öldürülürse, "örnek durum paketini kaydet" etkinliği, ActivityManager tarafından korunur ve kullanıcı uygulamanıza gittiğinde geri iletilir. Android bir işlem oluşturacak ve uygulamayı başlatacak, ardından yığının üstündeki etkinliği oluşturacak ve ardından en son kaydedilen örnek durum paketinde iletecektir. Daha önce bu paket, cihaz yeniden başlatılmaları arasında korunamadı, ancak Android her geçen gün harikalaşıyor ve sdk seviye 21'i başlatıyor, paket de yeniden başlatmaların arasında saklanıyor. –

3

, etkinlik yeniden yaratıldı, orijinal niyet hala kullanılacak. getIntent(), ilk oluşturulduğunda yaptığı gibi aynı amacı döndürecektir. Ancak, etkinlik yeniden oluşturulduğunda korumak istediğiniz başka verileriniz varsa, saveInstanceState()'u kullanarak kaydetmeniz gerekir. Bunu, cihazı aynı eylemle yok edeceği ve yeniden oluşturulacak şekilde çalışan bir etkinlikle döndürerek doğrulayabilirsiniz. Daha fazla bilgi için bkz. here.

İlgili konular