Poniższy rysunek (z oficjalnego dokumentu ) przedstawia dobrze znany cykl życia działania na Androidzie:
Z drugiej strony, gdy aktywność zostanie zniszczona przez system (na przykład z powodu konieczności odzyskania pamięci), stan aktywności jest czasami automatycznie zapisywany i przywracany za pomocą metod onSaveInstanceState()
i onRestoreInstanceState()
, jak pokazano na poniższym rysunku (również z oficjalnego dokumentu ):
Wiem, że nie zawszeonSaveInstanceState()
jest to wywoływane, gdy działanie ma zostać zniszczone. Na przykład, jeśli zostanie zniszczony, ponieważ użytkownik nacisnął przycisk „Wstecz”, stan aktywności nie zostanie zachowany. Ale w przypadkach, gdy stan jest zapisywany i przywracany i onSaveInstanceState()
/ gdy onRestoreInstanceState()
zostanie wywołany, kiedy dokładnie są wywoływani ?
Na przykład, zgodnie z powyższymi rysunkami, onRestoreInstanceState()
może być wywołany przed onStart()
lub po, onStart()
ale przed onResume()
lub po onResume()
. Podobnie istnieje kilka możliwości dla onSaveInstanceState()
. Kiedy więc są dokładnie nazywani?
W idealnym przypadku chciałbym zobaczyć połączony diagram przedstawiający stany cyklu życia czynności i metody zapisywania / odtwarzania , jeśli takie istnieją.
źródło
Odpowiedzi:
Zgodnie z dokumentacją :
źródło
Zgodnie z doc1 i doc2
źródło
Oprócz opublikowanych już odpowiedzi, w Androidzie P wprowadzono subtelną zmianę, która jest:
Źródło: docs
Oto odpowiedź na pytanie, dlaczego wprowadzono tę zmianę:
Źródło: docs
źródło
Do you know how will behave app that target P but runs on lower api?
Dopóki aplikacja działa na powiedzmy M, to wersja Androida, którą to urządzenie ma, nie zawiera zmian, które są wprowadzane w P, co oznacza, że niezależnie od wskazanego celuP
, nie zobaczysz inny dla urządzeń pre-P. Mam nadzieję, że to odpowiada na twoje pytanie.To jest dodatkowa informacja dla onSaveInstanceState (pakiet)
z dokumentów
Jest to więc domyślna implementacja ...
źródło
// To wywołanie zwrotne jest wywoływane tylko wtedy, gdy istnieje zapisana instancja, która została wcześniej zapisana przy użyciu // onSaveInstanceState (). Przywracamy pewien stan w onCreate (), podczas gdy możemy opcjonalnie przywrócić // inny stan tutaj, prawdopodobnie nadający się do użytku po zakończeniu onStart (). // Pakiet saveInstanceState jest taki sam, jak ten użyty w onCreate ().
źródło