2012-03-23 17 views
24

Czy ktoś wie o wyczerpującej liście, kiedy pakiet savedInstanceState zostanie użyty w działaniu?Kiedy jest używany pakiet savedInstanceState?

Wiem, że jest używany, gdy zmienia się orientacja urządzenia. Jednak wydaje się, że nie jest on używany, gdy użytkownik wymusza zamknięcie aplikacji z ustawień Androida, ale może to być spowodowane przez coś w moim kodzie.

Jakie są inne przypadki?

Aby być czystym, przez "używany" mam na myśli, gdy wywoływany jest onCreate(), pakiet savedInstanceState nie jest pusty i zawiera dane, które przekazałem temu ostatniemu wywołującemu onSaveInstanceState().

Odpowiedz

39

Jest używany, gdy działanie jest wymuszone przez system operacyjny (np. Gdy działanie jest w tle, a inne wymagają zasobów). Gdy tak się stanie, zostanie wywołana onSaveInstanceState(Bundle outstate) i do Twojej aplikacji zostanie dodana dowolna informacja o stanie, którą chcesz zapisać w outstate.

Po wznowieniu aktywności użytkownika zostanie wywołane onCreate(Bundle savedInstanceState), a savedInstanceState będzie miało wartość inną niż null, jeśli Twoja aktywność została zakończona w opisanym powyżej scenariuszu. Twoja aplikacja może następnie pobrać dane z savedInstanceState i ponownie wygenerować stan Twojej aktywności w taki sposób, w jaki był, kiedy użytkownik ostatni raz ją widział.

Zasadniczo w onCreate, gdy savedInstanceState ma wartość null, oznacza to, że jest to "świeże" uruchomienie Twojej Aktywności. A kiedy to niezerowe (jeśli aplikacja zapisane dane w onSaveInstanceState(...), to znaczy musi stan aktywny zostać odtworzone.

+1

Służy do zmiany orientacji i zakończenia aplikacji z powodu niskich zasobów, ale nie wtedy, gdy użytkownik zatrzymuje ją w ustawieniach Androida. Jakieś inne przypadki, w których byłby stosowany? – howettl

+1

To są tylko dwa przypadki, które znam. Kind of the edge case, ale wiem, że w Androidzie 4.x jest to ustawienie w Opcjach programisty> Nie zachowuj aktywności, a to w zasadzie wymusza działanie, które nie jest widoczne do zabicia, powodując wywołanie komendy 'onSaveInstanceState'. – triad

19

onSaveInstanceState służy do przechowywania danych tylko dla życia aplikacji (czyli tymczasowo)

Dane jest przechowywany w pamięci tylko do momentu aktywacji aplikacji, innymi słowy dane te są tracone po zamknięciu aplikacji, więc w twoim przypadku zamknięcie aplikacji nie jest używane onSaveInstanceState

Można ją wywołać tylko, gdy robisz operacje, podczas gdy twoja aplikacja wciąż żyje, np. gdy zmieniasz orientację ekranu, aktywność pozostaje nienaruszona, więc onSaveInstanceState jest wywoływana.

Jeśli jednak chcesz trwale przechowywać dane, musisz użyć SharedPreferences i SQLite database.

Powiązane problemy