Speichern Sie Daten in der onDestroy-Methode der Aktivität

8

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?

    
ryabenko-pro 19.12.2012, 16:15
quelle

4 Antworten

17

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

Siehe Stoppen Sie Ihre Aktivität

    
iagreen 19.12.2012, 16:23
quelle
4

Sie sollten die Methode onDestroy() nicht zum Speichern von Daten verwenden. Stattdessen sollten Sie internen / externen Speicherplatz verwenden oder Ihren Code in der onPause() -Methode schreiben.

    
pooja 19.12.2012 16:41
quelle
3

Sie sollten onStop

verwenden

Aktivitätsdokumente

Sie könnten auch onPause verwenden, aber das wird aufgerufen, wenn Sie von Activity weg navigieren, einschließlich des Ausschaltens des Bildschirms.

    
Sam Dozor 19.12.2012 16:21
quelle
2

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 werden    onSaveInstanceState(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.

    
user2314737 06.02.2014 12:11
quelle