2016-04-25 5 views
4

Kurze Frage: Ist es möglich, onSaveInstanceState() Methode zu speichern Daten verwenden, dann finish() auf Aktivität aufrufen und beim nächsten Start der Aktivität die Daten zurück in savedInstanceState zu bekommen? Oder bedeutet finish() einer Aktivität, dass die Daten verschwunden sind?onSaveInstanceState und finish()

Wenn die erste Antwort korrekt ist, habe ich ein Problem in meiner Implementierung, weil ich null in onCreate() bekomme, obwohl die Daten gespeichert wurden. Wenn zweite Antwort richtig ist, muss ich zu überdenken, wie ich meine Aktivitäten miteinander verbinden: o)

Antwort

5

Ist es möglich, Daten mit onSaveInstanceState() -Methode zu retten, dann rufen Sie Finish() auf Aktivität und bei der nächsten Beginn der Aktivität, um die Daten in savedInstanceState zurückzuholen?

Nr

Oder finish() von einer Tätigkeit sind die Daten weg?

Ja. Der gespeicherte Instanz Zustand Bundle ist für Fälle, in denen aus Sicht des Benutzers, Ihre Aktivität ist immer noch rund, aber es ist aus technischen Gründen zerstört:

  • Konfigurationsänderungen (zB Bildschirmdrehung)
  • Prozess Beendigung (mit dem Benutzer die App Rückkehr ziemlich schnell)

Wenn finish() aus anderen Gründen genannt wird — Sie es direkt aufrufen, drückt Benutzer BACK usw. — dann wird die gespeicherte Instanz Zustand nicht mehr benötigt und kann verworfen werden.

Der gespeicherte Instanzstatus Bundle ist daher für transiente Daten gedacht, die Sie behalten möchten, die jedoch angesichts von Konfigurationsänderungen und Prozessbeendigung, wie z. B. dem Inhalt eines teilweise ausgefüllten Formulars, nicht verloren gehen .

+0

danke für die Klärung – Ellrohir

+0

Bitte beachten Sie, dass, wenn Sie sich nur für die Bildschirmdrehung ohne Dialoge nur Textfelder bearbeiten - müssen Sie onSaveInstanceState nicht implementieren - es gibt nur eine muss sein - alle Ihre Text bearbeiten müssen ID haben Wert in XML. – Robert

+0

jetzt ist mein Problem zu lösen: Ich habe Hauptaktivität und drei andere Aktivitäten, die durch Klicken auf Schaltflächen in Main aufgerufen werden sollen. Wenn ich zu Aktivitäten gehe, kann eine Aktion ausgeführt werden und ich muss in der Lage sein, die Hauptaktivität über das Ergebnis zu informieren. Ich weiß, wie Intent verwendet werden kann, um eine Aktivität zu starten und beim Starten der App einige Daten zu übergeben. Aber wenn ich mit neuen Aktivitäten anfange, bleiben die alten und machen Chaos. Deshalb verwendet finish() sie um sie zu beenden. Gibt es einen besseren Weg, damit umzugehen? – Ellrohir

Verwandte Themen