Ich schreibe eine Aufgabenliste und habe Project-Objekt, das alle Aufgaben (und Metadaten) enthält. Ich benutze Aktionsprotokoll, also wenn Aufgaben sich ändern, speichere ich es nicht sofort in der Datenbank, behalte es einfach im Speicher, um in der Datenbank auf Aktivitätsende abzulegen. Die Methode onDestroy von activity ist der beste Ort dafür: Wenn keine Methode onRetainNonConfigurationInstance aufgerufen wurde, starte ich den Dienst, um das Projekt zu speichern (die Instanz wird in der Anwendung gespeichert). Das Speichern ist teuer: Im DB-Projekt gibt es eine Revision, also speichere ich neue Daten, ändere die aktuelle Revision und lösche die Daten der vorherigen Revision. So habe ich keine Angst vor plötzlichen Anwendungen zu stoppen.
ABER, zur Dokumentation muss ich do not count on this method being called as a place for saving data.
Gibt es einen alternativen Ort zum Speichern meiner Daten?
OnDestroy wird nicht immer aufgerufen. Aus den Lifecycle-Dokumenten -
Wenn Ihre Aktivität einen Aufruf an die onStop () -Methode empfängt, ist dies nicht der Fall länger sichtbar und sollte fast alle Ressourcen freigeben, die nicht sind benötigt, während der Benutzer es nicht verwendet. Sobald deine Aktivität beendet ist, Das System könnte die Instanz zerstören, wenn es das System wiederherstellen muss Erinnerung. In extremen Fällen kann das System Ihre App einfach zum Absturz bringen Prozess ohne Aufruf der letzten onDestroy () Callback der Aktivität, so Es ist wichtig, dass Sie onStop () verwenden, um Ressourcen freizugeben, die möglicherweise auslaufen Speicher.
Obwohl die Methode onPause () vor onStop () aufgerufen wurde, sollten Sie Verwenden Sie onStop (), um eine größere, CPU-intensivere Abschaltung durchzuführen Operationen, wie das Schreiben von Informationen in eine Datenbank
Gemäß der Activity Lifecycle-Dokumentation sollten Sie Ihre Daten in onPause()
speichern. oder onSaveInstanceState(Bundle)
.
Die Methoden onDestroy()
und onStop()
werden möglicherweise nie aufgerufen, bevor die Aktivität beendet wird.
Auszüge aus der Activity Lifecycle-Dokumentation :
protected void onDestroy ()
Hinweis: Zählen Sie nicht darauf, dass diese Methode als Speicherort aufgerufen wird Daten! Zum Beispiel, wenn eine Aktivität Daten in einem Inhalt bearbeitet Diese Änderungen sollten entweder in
onPause()
oder festgeschrieben werdenonSaveInstanceState(Bundle)
, nicht hier.protected void onStop ()
Beachten Sie, dass diese Methode in Situationen mit wenig Speicher, in denen das System nicht vorhanden ist, möglicherweise niemals aufgerufen wird genügend Speicher, um den Prozess Ihrer Aktivität nach dem Aufruf der onPause () -Methode fortzusetzen.
Tags und Links android android-service android-sqlite ondestroy