2012-08-24 9 views
5

Przekaż mi wartość boolean do mojej aktywności, gdy utworzę ją za pomocą pakietu Intent BundleExtra. Teraz patrząc na activity lifecycle, jeśli moja aktywność zostanie zatrzymana (onStop), inna aplikacja potrzebuje pamięci, aby proces aplikacji został zabity, a następnie użytkownik przechodzi do działania (onCreate). Czy ostatni zestaw onCreate zawiera moją oryginalną wartość logiczną? Zakładam, że jeśli chciałbym, żeby ta boolean została zapisana, musiałbym ją zapisać w numerze OnSaveInstanceState, zgadza się?Jeśli działanie zostanie zatrzymane, a następnie odtworzysz to, co zostanie przekazane do getIntent()

Odpowiedz

2

użyłbym OnPause() z tego powodu (od docs)

pamiętać, że ważne jest, aby zapisać trwałych danych w OnPause() zamiast z onSaveInstanceState (Bundle), ponieważ ten ostatni nie jest częścią połączeń zwrotnych cyklu życia od , więc nie będzie wywoływana w każdej sytuacji jako opisana w dokumentacji.

Następnie przeczytaj ponownie w dokumencie onCreate(), np. z bazy danych lub innego zasobu została zapisana w

Więc w zależności, jak ważne jest, że wartość logiczna będzie używany mechanizm oszczędzania chcesz .. na stan przetrwałego. http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState

I stanie UI takich jak prostych tekstów , pozycje używać onSaveInstanceState jak opisano tutaj: Saving Android Activity state using Save Instance State

Jako podsumowanie: gdy proces zabity Boolean = poszedłjeśli nie został zapisany :)

+0

doskonały. Podsumowanie jest dokładnie tym, czego szukałem. Właściwie to chcę, żeby ta boolean zniknęła, więc mogę śledzić, gdzie jest on wywoływany z – jsb

1

Ma uno V. ma rację, w twoim przypadku musisz iść z onPause()

Faktem jest, żeSaveInstanceState (Bundle bundle) ma na celu zapisanie stanu w twoim bieżącym wystąpieniu. Więc kiedy aplikacja zostanie zabity, zapisany pakiet zbyt

Można użyć SharedPreferences zapisać wartość logiczną:

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

i pobrać go na swojej onCreate:

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

To nie jest poprawne. Gdy proces hostingu Twojej aplikacji zostanie zabity, "Aktywny pakiet stanu instancji" zostanie zachowany przez ActivityManager i zostanie zwrócony, gdy użytkownik przejdzie do Twojej aplikacji. Android utworzy proces i utworzy instancję aplikacji, a następnie utworzy działanie, które było na szczycie stosu, a następnie przejdzie do ostatniego zapisanego pakietu stanu instancji. Wcześniej ten pakiet nie mógł być zachowany po ponownym uruchomieniu urządzenia, ale Android z dnia na dzień robi się niesamowity i zaczynał 21 poziom 21, pakiet jest również przechowywany po ponownym uruchomieniu komputera. –

3

Właściwie, kiedy swoją aktywność zostanie odtworzony, pierwotna intencja będzie nadal używana. getIntent() zwróci tę samą intencję, co podczas tworzenia. Jeśli jednak masz inne dane, które chcesz zachować po odtworzeniu działania, musisz je zapisać, używając saveInstanceState(). Możesz to sprawdzić, obracając urządzenie przy działającej aktywności, ponieważ zostanie ono zniszczone i odtworzone z tą samą intencją. Aby uzyskać więcej informacji, zobacz here.

Powiązane problemy