12 Stimmen

onRestoreInstanceState() wird nicht aufgerufen, wenn es erwartet wird

Ich habe in letzter Zeit einige Probleme mit onSaveInstanceState() y onRestoreInstanceState() . Ich habe mehrere Aktivitäten, die diese Methoden verwenden, um den Zustand für den Fall zu speichern, dass sie vom System bereinigt werden. Die meisten von ihnen funktionieren, außer einer, und ich habe keine Ahnung, warum.

Im Einzelnen geschieht Folgendes:

  • Mein Emulator läuft, und die Entwicklungswerkzeuge sind auf destroy() alle Aktivitäten, wenn sie nicht mehr sichtbar sind. (Damit ich nachweisen kann, dass Speichern/Wiederherstellen richtig funktioniert).
  • Die betreffende Aktivität wird gestartet, und ich ändere einen Teil ihres Zustands.
  • Ich starte eine neue Aktivität, lasse sie einen Moment laufen und gehe dann über die Schaltfläche "Zurück" zu meiner vorherigen Aktivität.
  • Wenn ich zu der betreffenden Aktivität zurückkehre, stelle ich fest, dass der Standardstatus wiederhergestellt ist, d. h. sie hat nicht den Status, den sie haben sollte.

Ich habe festgestellt, dass die onSaveInstanceState() genannt wird, onCreate() aufgerufen wird, aber ein Null-Bündel hat, und onRestoreInstanceState() wird nie aufgerufen.

Hat das schon einmal jemand gesehen?

0 Stimmen

Es tut mir leid, ich weiß, dass diese Fragen schon lange her sind, aber wie haben Sie den Status Ihrer Aktivität gespeichert? Würden Sie sich bitte meine Frage ansehen? stackoverflow.com/questions/26142255/

0 Stimmen

Bitte prüfen Sie meine Lösung angerufen werden.

4voto

nicholas.hauschild Punkte 41528

Ich glaube, ich habe das Problem herausgefunden, und zwar mit Details, die ich in der ursprünglichen Frage nicht genannt habe.

Eines der Dinge, die ich in meinem Bundle speichere, ist ziemlich groß (eine 500x1000 Pixel große Bitmap). Als ich das aus meinem Bundle entfernte, wurde alles andere gespeichert, die Methode onCreate() wurde mit dem Bundle aufgerufen und onRestoreInstanceState() wurde ebenfalls aufgerufen.

Daher glaube ich, dass es eine maximale Größe des Bündels gibt, die Sie in onSaveInstanceState() speichern können, was aber nicht dokumentiert ist. (zumindest soweit ich das beurteilen kann)

3voto

CommonsWare Punkte 950864

Die von Ihnen verwendete Dev-Tools-Einstellung zeigt möglicherweise nicht das von Ihnen erwartete Verhalten.

Wenn Sie Folgendes testen möchten onSaveInstanceState() / onRestoreInstanceState() ist es am einfachsten, die Ausrichtung zu ändern ( <Ctrl>-<F11> ). Standardmäßig wird Ihre Aktivität unter Verwendung des Instanzstatus zerstört und neu erstellt.

1voto

Ognyan Punkte 13213

Die Erklärung warum onRestoreInstanceState() nicht aufgerufen wird (oder spezieller: wann sie aufgerufen wird), wird in einem anderen Thread zu einer anderen Frage beschrieben: onSaveInstanceState () und onRestoreInstanceState ()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X