Wann Daten in der Datenbank gespeichert werden, onPause () oder onStop ()?

8

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.

    
klifa 06.04.2015, 22:43
quelle

2 Antworten

13
  

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.

    
CommonsWare 07.04.2015, 16:24
quelle
0
  • Wenn Sie mehr Sicherheit wünschen, Speicher in onPause .
  • Wenn Ihre Daten so groß sind, dass Sie sie für einige Sekunden speichern müssen, können Sie einen Hintergrund Service (z. B. IntentService ) zum Speichern öffnen.
  • Sie können auch die Systemversion in Ihrem Code überprüfen und auswählen, wann sie gespeichert werden soll. %Code%
  • In den meisten Situationen wird diese Regel, wann zu speichern ist, von einigen angepassten Betriebssystemen nicht geändert. Aber natürlich kann es auch ein anderes Betriebssystem geben, was es sicherlich verändert hat. Also das Wichtigste in der Android-Entwicklung ist, dass Sie wissen müssen, dass alles in verschiedenen Telefonen unterschiedlich sein kann.
Turtle 06.04.2015 22:48
quelle