Die folgende Abbildung (aus dem offiziellen Dokument ) beschreibt den bekannten Lebenszyklus einer Android-Aktivität:
Wenn andererseits die Aktivität vom System zerstört wird (z. B. weil Speicher zurückgefordert werden muss), wird der Status der Aktivität manchmal automatisch gespeichert und mithilfe der Methoden wiederhergestelltonSaveInstanceState()
und onRestoreInstanceState()
, wie in der folgenden Abbildung dargestellt (auch) aus dem offiziellen Dokument ):
Ich bin mir bewusst , dass onSaveInstanceState()
ist nicht immer aufgerufen , wenn eine Aktivität im Begriff ist , zerstört werden. Wenn es beispielsweise zerstört wird, weil der Benutzer die Schaltfläche "Zurück" gedrückt hat, bleibt der Aktivitätsstatus nicht erhalten. Aber in den Fällen , wenn der Zustand wird gespeichert und wiederhergestellt, und onSaveInstanceState()
/ onRestoreInstanceState()
aufgerufen, wann genau werden sie genannt ?
Zum Beispiel könnte gemäß den obigen Figuren onRestoreInstanceState()
vorher onStart()
oder nachher, onStart()
aber vorher onResume()
oder nachher aufgerufen werden onResume()
. Ebenso gibt es mehrere Möglichkeiten für onSaveInstanceState()
. Wann werden sie genau genannt?
Im Idealfall möchte ich ein kombiniertes Diagramm sehen, das die Aktivitätslebenszykluszustände und die Speicher- / Wiederherstellungsmethoden zeigt , falls vorhanden.
quelle
Antworten:
Gemäß der Dokumentation :
quelle
Wie pro doc1 und doc2
quelle
Zusätzlich zu den bereits veröffentlichten Antworten wurde in Android P eine subtile Änderung eingeführt:
Quelle: docs
Hier ist die Antwort, warum diese Änderung eingeführt wird:
Quelle: docs
quelle
Do you know how will behave app that target P but runs on lower api?
Solange die App auf M ausgeführt wird, enthält die Version von Android, die dieses Gerät enthält, keine Änderungen, die in P eingeführt wurden. Dies bedeutet, dass unabhängig davon, ob Sie ein Ziel angegeben haben, dieses nicht angezeigtP
wird anders für Pre-P-Geräte. Hoffe das beantwortet deine Frage.Dies ist eine zusätzliche Information für onSaveInstanceState (Bundle)
aus docs
Es ist also die Standardimplementierung für ..
quelle
// Dieser Rückruf wird nur aufgerufen, wenn eine zuvor mit // onSaveInstanceState () gespeicherte Instanz vorhanden ist. Wir stellen einen Status in onCreate () wieder her, während wir hier optional // einen anderen Status wiederherstellen können, der möglicherweise nach Abschluss von onStart () verwendet werden kann. // Das savedInstanceState-Bundle ist das gleiche wie das in onCreate () verwendete.
quelle