Android lifecycle: Füllen Sie die Daten in der Aktivität in onStart() oder onResume()?
Sollten Sie die Daten über einen cursor und füllen Sie die Daten auf dem Bildschirm, wie das einstellen der Fenster-Titel, in onStart()
oder onResume()
?
onStart()
scheint der logische Ort, weil nach onStart()
die Aktivität kann bereits angezeigt, wenn auch im hintergrund. Vor allem ich hatte ein problem mit einem verwaltet dialog, die mich zum überdenken dieser. Wenn der Benutzer dreht den Bildschirm, während der dialog noch offen ist, onCreateDialog()
und onPrepareDialog()
genannt werden zwischen onStart()
und onResume()
. Wenn der dialog muss auf der Grundlage der Daten, die Sie benötigen, um die Daten vor onResume()
.
Wenn ich mich richtig über onStart()
warum dann nicht die Notepad-Beispiel geben ein schlechtes Beispiel, indem Sie es in onResume()
? Sehen http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html NoteEditor.java Linie 176 (title = mCursor.getString...
).
Außerdem, was ist, wenn meine Aktivität startet eine andere Aktivität/Dialog, die änderungen der Daten meine cursor-tracking. Selbst im einfachsten Fall bedeutet das, dass ich manuell update meinem vorherigen Bildschirm (ein listener für einen dialog in der Haupt-Aktivität), oder alternativ, dass ich mich registrieren eine ContentObserver, da bin ich mir nicht mehr die Aktualisierung der Daten in onResume() (obwohl ich könnte es zweimal aktualisiert natürlich)?
Ich weiß, es ist eine grundlegende Frage, aber der dialog erst vor kurzem, zu meiner überraschung, hat mich dies zu realisieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zur Beantwortung Ihrer Frage über NoteEditor, nehmen Sie einfach einen Blick auf die Zeilen vor, die Sie zitieren, und du wirst sehen...
Den Kommentar scheint das alles erklären. Obwohl ich noch nicht gegangen durch den Editor Beispiel mich, es scheint, dass der Autor(s) sind Gebäude in der Möglichkeit zum wiederherstellen von änderungen während der NoteEditor angehalten wird (und dann wieder).
Als GSree erklärt (während ich getippt diese), gibt es nicht eine richtige oder falsche Antwort, und es hängt einfach davon ab, was getan werden muss, an welchem Punkt der Activity-Lebenszyklus.
Wieder die Lösung hängt davon ab, was zu Ihnen passt.
Wenn Sie möchten, den cursor auf die pre-besiedelten einmal pro Anwendung (und nicht die Mühe über jede änderung, dann kann man es in onCreate(). Diese Methode wird aufgerufen werden, nur, wenn die app den Prozess gekillt und die app ist reinitiated.
Wenn Sie wollen den cursor zu sein vorausgefüllt jedesmal, wenn die sichtbare Leben beginnt (den meisten Fällen wird eine service - /broadcast ruft Ihre Tätigkeit, die Sie verwenden sollten, onStart()
Wenn Sie wollen den cursor zu sein, bereits für jedes Vordergrund-Lebenszyklus der Aktivität, die Sie verwenden sollten, onResume(). Also, wenn Sie ein Dialogfeld oder eine andere subactivity ändern einige Informationen und damit Sie neu geladen werden soll, den cursor, ist es am besten, Sie tun so in onResume(). Der Nachteil für diese Methode ist, jedes mal wenn die activity kommt in den Vordergrund, der cursor ist geladen.
Hoffe, das macht es klar