Ich weiß, dass diese Frage schon millionenfach gestellt wurde. Ich selbst wusste jedoch, dass ich die Antwort bereits kannte und dass der einzige garantierte Anruf onPause () war, also sollten Sie Ihre Daten dort speichern.
An vielen Stellen der androiden Dokumentation schlagen sie jedoch immer vor, dass sie in der onPause () - Methode keine schwere Arbeit verrichten (z. B. Daten in der Datenbank schreiben), da dies den Übergang zwischen den Aktivitäten verzögert.
Laut Android-Entwicklerhandbuch in Tabelle 1
onPause (): Diese Methode wird normalerweise verwendet, um nicht gespeicherte Änderungen an persistenten Daten zu übernehmen, Animationen und andere Dinge zu stoppen, die CPU verbrauchen, und so weiter. Es sollte alles tun, was es sehr schnell macht, weil die nächste Aktivität nicht fortgesetzt wird, bis es zurückkehrt.
Killable: JA
Dann nach Android-Entwickler-Referenzhandbuch in der ähnlichen Tabelle .
Es sagt das gleiche aber:
Killable: Pre-HONEYCOMB
Und sie fügen eine kleine Notiz hinzu, die sagt:
Beachten Sie, dass sich diese Semantik zwischen Anwendungen, die auf Plattformen ab HONEYCOMB abzielen, und solchen, die auf ältere Plattformen abzielen, leicht ändert. Beginnend mit Honeycomb befindet sich eine Anwendung nicht im Status "killable", bis ihr onStop () zurückgegeben wurde . Dies wirkt sich aus, wenn onSaveInstanceState (Bundle) aufgerufen werden kann (es kann nach onPause () sicher aufgerufen werden und ermöglicht es und der Anwendung, bis onStop () zu warten, um den dauerhaften Status zu speichern.
Killable
Beachten Sie die Spalte "Killable" in der obigen Tabelle - für diejenigen Methoden, die als killable gekennzeichnet sind, nachdem diese Methode den Prozess zurückgibt, der die Aktivität hostet, kann das System jederzeit ohne es abbrechen eine andere Zeile seines Codes wird ausgeführt.
FÜR POST-HONEYCOMB (ich interessiere mich nicht für frühere Versionen): Ist es also in Ordnung, anzunehmen, dass jedes Android-Gerät (einschließlich verschiedener ROMs) einen Anruf bei onStop für die Aktivität sicherstellen wird? Und das ist der beste Ort, um zeitaufwändiges Speicherschreiben der App zu machen?
Hinweis: Dies ist extrem verwirrend, da die meisten Antworten hier, Websites, Bücher und sogar Online-Tests eine korrekte Antwort darauf geben, dass Sie sie in onPause und NICHT in onStop speichern sollten.
Wann speichern Sie Daten in der Datenbank onPause () oder onStop ()?
Entweder. Sie sind fast identisch, besonders auf Android 3.0 +.
Wenn die Aktivität, die den Vordergrund übernimmt, eine typische Vollbildaktivität ist, so dass die frühere Aktivität nicht mehr sichtbar ist, werden onPause()
und onStop()
in schneller Folge aufgerufen.
Wenn die Aktivität, die den Vordergrund übernimmt, eher einem Dialog ähnelt, in dem die frühere Aktivität noch sichtbar ist, wird onPause()
aufgerufen, aber nicht onStop()
, bis die Aktivität no ist länger sichtbar (zB Benutzer drückt jetzt HOME).
Die meisten Apps machen sich keine Sorgen um das Szenario "Thema, um mehr wie ein Dialog zu sein". In diesem Fall werden onPause()
und onStop()
gleich nach dem nächsten aufgerufen, und Sie können den Hintergrundthread zum Speichern abspeichern Daten in welchen von denen für Sie sinnvoll ist.
An vielen Stellen der androiden Dokumentation schlagen sie jedoch immer vor, dass sie in der onPause () - Methode keine schwere Arbeit verrichten (z. B. Daten in der Datenbank schreiben), da dies den Übergang zwischen den Aktivitäten verzögert.
Dasselbe gilt für onStop()
, da beide Methoden im Hauptthread der Anwendung aufgerufen werden.
Ist es also in Ordnung, anzunehmen, dass jedes Android-Gerät (einschließlich verschiedener ROMs) einen Aufruf von onStop für die Aktivität sicherstellen wird?
Sowohl onPause()
als auch onStop()
haben die gleichen Eigenschaften vom Standpunkt der Beendigung des Prozesses. Entweder beide sollten angerufen werden (Normalfall) oder keiner wird gerufen (z. B. stürzt der Akku auf der Rückseite des Telefons ab).
Und das ist der beste Ort, um zeitaufwändiges Speicherschreiben der App zu machen?
Entweder onPause()
oder onStop()
sind gute Orte, um die Arbeit in einem Hintergrund-Thread auszulösen, um Ihre Daten zu erhalten. Wenn Sie es vorziehen, diese Arbeit in onStop()
zu erledigen, können Sie dies gerne tun. Persönlich bin ich ein onPause()
Art von Typ.
onPause
. Service
(z. B. IntentService
) zum Speichern öffnen. Tags und Links android android-activity android-lifecycle android-database