2012-03-23 3 views
24

Kennt jemand eine vollständige Liste darüber, wann das savedInstanceState-Paket in einer Aktivität verwendet wird?Wann wird das savedInstanceState-Paket tatsächlich verwendet?

Ich weiß, dass es verwendet wird, wenn sich die Ausrichtung des Geräts ändert. Es scheint jedoch nicht verwendet zu werden, wenn der Benutzer die App von den Android-Einstellungen aus schließt, aber dies könnte auf etwas in meinem Code zurückzuführen sein.

Welche anderen Fälle gibt es?

Um klar zu sein, mit "verwendet" ich meine, wenn onCreate() aufgerufen wird, ist das savedInstanceState-Bundle nicht null und enthält die Daten, die ich beim letzten Mal onSaveInstanceState() aufgerufen wurde.

Antwort

39

Sie wird verwendet, wenn die Aktivität vom Betriebssystem zwangsweise beendet wird (z. B. wenn Ihre Aktivität im Hintergrund läuft und eine andere Aufgabe Ressourcen benötigt). Wenn dies geschieht, wird onSaveInstanceState(Bundle outstate) aufgerufen und es liegt an Ihrer App, beliebige Statusdaten hinzuzufügen, die Sie in outstate speichern möchten.

Wenn der Benutzer Ihre Aktivität wieder aufnimmt, wird onCreate(Bundle savedInstanceState) aufgerufen und savedInstanceState ist nicht null, wenn Ihre Aktivität in einem der oben beschriebenen Szenarien beendet wurde. Ihre App kann dann die Daten von savedInstanceState abrufen und den Status Ihrer Aktivität wiederherstellen, wie es war, als der Benutzer sie zuletzt gesehen hat.

Grundsätzlich in onCreate, wenn savedInstanceState ist Null, dann bedeutet dies, dass dies eine 'frische' Start Ihrer Aktivität ist. Und wenn es nicht null ist (wenn Ihre Anwendung die Daten in onSaveInstanceState(...) gespeichert, bedeutet es, den Aktivitätszustand neu erstellt werden muss.

+1

So - es verwendet, um eine Ausrichtung ändern, und wenn die App wegen geringer Ressourcen beendet wird, aber nicht, wenn der Benutzer es über Android-Einstellungen stoppt. Irgendwelche anderen Fälle, in denen es benutzt würde? – howettl

+1

Das sind die einzigen beiden Fälle, die ich kenne. Eine Art Randfall, aber ich weiß, dass es in Android 4.x eine Einstellung in Entwickleroptionen> Aktivitäten nicht beibehalten gibt, und dies erzwingt im Grunde alle Aktivitäten, die nicht sichtbar sind, um getötet zu werden, wodurch 'onSaveInstanceState' aufgerufen wird. – triad

19

onSaveInstanceState verwendet wird, um Daten zu speichern nur für Anwendungslebensdauer (dh vorübergehend)

Die Daten im Speicher wird nur gehalten, bis die Anwendung am leben ist, diese Daten mit anderen Worten verloren, wenn die Anwendung geschlossen wird, so in Ihrem Fall, wenn Sie die App erzwingen schließen onSaveInstanceState nicht verwendet werden.

Es kann nur aufgerufen werden, wenn Sie das tun Wenn Ihre Anwendung noch aktiv ist, z. B. wenn Sie die Bildschirmausrichtung ändern, ist die Aktivität noch intakt. onSaveInstanceState heißt. Wenn Sie die Daten dauerhaft speichern möchten, müssen Sie SharedPreferences und SQLite database verwenden.