Ich kann die Bedeutung des onStart()
Übergangszustands nicht verstehen. DasonResume()
Methode wird immer danach aufgerufen onStart()
. Warum kann es nicht sein, dass das onResume()
aufgerufen wird onRestart()
und onCreate()
Methoden nur ausschließen onStart()
? Was ist seine Aufgabe?
Warum können wir nicht ohne leben? onStart()
. Ich halte es immer noch für überflüssig (wahrscheinlich, weil ich seine Bedeutung nicht vollständig verstehe).
Antworten:
OK, da meine erste Antwort ziemlich lang war, werde ich sie nicht weiter ausdehnen, also lass es uns versuchen ...
BITTE BEACHTEN SIE: Ich habe die Anrufe zu Dingen wie
super.onCreate(...)
usw. absichtlich weggelassen . Dies ist Pseudocode, also geben Sie mir hier eine künstlerische Lizenz. ;)Die Methoden für
DriveToWorkActivity
folgen ...OK, es ist also noch eine lange (sorry Leute). Aber hier ist meine Erklärung ...
onResume()
ist, wenn ich anfange zu fahren undonPause()
wenn ich vorübergehend zum Stillstand komme. Also fahre ich und erreiche ein rotes Licht, damit ich innehalte ... das Licht wird grün und ich fahre fort. Noch ein rotes Licht und ich mache eine Pause, dann grün, damit ich weitermache. DieonPause() -> onResume() -> onPause() -> onResume()
Schleife ist eng und kommt während meiner Reise oft vor.Die Schleife vom Zurückhalten durch einen Neustart (Vorbereitung auf die Fortsetzung meiner Reise) bis zum erneuten Starten ist vielleicht weniger häufig. In einem Fall sehe ich das Lebensmittelgeschäft und das
GroceryStoreActivity
wird gestartet (was michDriveToWorkActivity
zum Punkt zwingtonStop()
). Wenn ich aus dem Laden zurückkomme, gehe ich durchonRestart()
undonStart()
setze dann meine Reise fort.Ich könnte den Code, der
onStart()
in beiden enthalten ist, einfügenonCreate()
und mich überhauptonRestart()
nicht darum kümmern, ihn zu überschreiben,onStart()
aber je mehr zwischenonCreate() -> onResume()
und getan werden mussonRestart() -> onResume()
, desto mehr dupliziere ich Dinge.Also, um noch einmal zu fordern ...
Wenn Sie nicht überschreiben,
onStart()
geschieht dies effektiv. Obwohl dieonStart()
Methode vonActivity
implizit aufgerufen wird, ist der Effekt in Ihrem Code effektivonCreate() -> onResume()
oderonRestart() -> onResume()
.quelle
onCreate()
undonRestart()
viel gemeinsamen Code teilen würden, oder?Activity
Lebenszyklus verwendet werden kann. Die ErstellungsphaseonCreate(...)
kann durchaus viel bewirken, wenn es darum geht, Instanzmitglieder (UI-Elemente usw.) zu instanziieren, aber ein 'Neustart' sollte dies nicht erfordern. In der Realität müssen vieleActivities
nicht mehr als implementierenonCreate(...)
,onResume()
undonPause()
die anderen Methoden sind für Fälle verfügbar, in denen Sie möglicherweise andere Dinge tun müssen und der Schlüssel darin besteht, zu verstehen, wo der Code abgelegt werden muss.Activity
Lebenszyklusmethoden nicht explizit - es ist das Android-Betriebssystem, das dies tut und es sehr effizient (vorausgesetzt, der App-Entwickler weiß, was er tut und codiert auch effizient). Wenn Sie viel Android entwickeln, werden Sie feststellen, warum die Dinge so funktionieren, wie sie funktionieren - es ist nicht 100% perfekt, aber es ist ziemlich gut.onStart
undonResume
ist der der Sichtbarkeit und der Benutzerinteraktion. Diese Metapher für das Autofahren ist verwirrend und nicht wirklich hilfreich.Kurze Antwort:
Wir können nicht ohne onStart leben, da dies der Zustand ist, in dem die Aktivität für den Benutzer "sichtbar" wird, der Benutzer jedoch nicht mit ihr "interagieren" kann, weil sie sich möglicherweise mit einem anderen kleinen Dialogfeld überschneidet. Diese Fähigkeit zur Interaktion mit dem Benutzer unterscheidet onStart und onResume. Betrachten Sie es als eine Person hinter einer Glastür. Sie können die Person sehen, aber Sie können nicht mit ihr interagieren (sprechen / hören / Hände schütteln). OnResume ist wie der Türöffner, nach dem Sie die Interaktion beginnen können.
Außerdem ist onRestart () am wenigsten verstanden. Wir können die Frage stellen, warum nicht direkt nach onStop () statt onRestart () zu onStart () oder onResume () wechseln. Es wird einfacher zu verstehen, wenn wir feststellen, dass onRestart () teilweise onCreate () entspricht, wenn der Erstellungsteil weggelassen wird. Grundsätzlich führen beide Zustände zu onStart () (dh die Aktivität wird sichtbar). Also müssen beide Staaten das anzuzeigende Zeug "vorbereiten". OnCreate hat die zusätzliche Verantwortung, das anzuzeigende Material zu "erstellen"
Ihre Codestrukturen könnten also zu etwas passen wie:
Die gesamte Verwirrung wird dadurch verursacht, dass Google nicht intuitive Namen anstelle von etwas wie folgt gewählt hat:
Das Aktivitätsdiagramm kann wie folgt interpretiert werden:
quelle
onStart()
Wird aufgerufen, wenn die Aktivität für den Benutzer sichtbar wird.onResume()
Wird aufgerufen, wenn die Aktivität mit dem Benutzer interagiert. In diesem Fall möchten Sie möglicherweise verschiedene Dinge tun.Siehe diesen Link als Referenz.
quelle
onResume()
wird genannt:onStart()
Activity
in den Vordergrund kommt.Von http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle :
quelle
Das Buch "Hallo Android, Einführung in Googles Mobile Development Platform" bietet eine schöne Erklärung des Lebenszyklus von Android-Apps. Zum Glück haben sie das jeweilige Kapitel als Auszug online. Siehe die Grafik auf Seite 39 unter http://media.pragprog.com/titles/eband3/concepts.pdf
Übrigens ist dieses Buch für Android-Anfänger sehr zu empfehlen!
quelle
Ein besonders lebhaftes Beispiel ist, wenn Sie sich entscheiden, einen verwalteten Dialog aus einer Aktivität mit anzuzeigen
showDialog()
. Wenn der Benutzer den Bildschirm dreht, während der Dialog noch geöffnet ist (wir nennen dies eine "Konfigurationsänderung"), durchläuft die Hauptaktivität alle Aufrufe des EndlebenszyklusonDestroy()
, bis sie neu erstellt wird, und geht die Lebenszyklen erneut durch. Was Sie jedoch möglicherweise nicht erwarten, ist, dassonCreateDialog()
undonPrepareDialog()
(die Methoden, die aufgerufen werden, wenn Sie dies tun,showDialog()
und jetzt wieder automatisch, um den Dialog neu zu erstellen - automatisch, da es sich um einen verwalteten Dialog handelt) zwischenonStart()
und aufgerufen werdenonResume()
. Der Hinweis hier ist, dass der Dialog nicht den gesamten Bildschirm abdeckt und daher einen Teil der Hauptaktivität sichtbar lässt. Es ist ein Detail, aber es spielt eine Rolle!quelle
onStart()
onStart()
, um Änderungen zu überwachen, die sich auf Ihre Benutzeroberfläche auswirken. Sie müssen die Registrierung in onStop () aufheben.onResume()
onStart()
Normalerweise wird die Arbeit an einen Hintergrund-Thread gesendet, dessen Rückgabewerte sind:START_STICKY, um automatisch neu zu starten, wenn es getötet wird, um es aktiv zu halten.
START_REDELIVER_INTENT
für automatischen Neustart und erneuten Versuch, wenn der Dienst vor stopSelf () beendet wurde.onResume()
wird vom Betriebssystem aufgerufen, nachdem das Gerät in den Ruhezustand versetzt wurde oder nachdem eine Warnung oder eine andere untergeordnete Aktivität auf einem Teil des Bildschirms einen Teil des vorherigen Fensters sichtbar lässt, sodass eine Methode erforderlich ist, um Felder neu zu initialisieren (innerhalb einer Versuchsstruktur mit einer Ausnahme von Ausnahmen) ). Eine solche Situation führt nicht dazuonStop()
, dass sie aufgerufen wird, wenn das Kind schließt.onResume()
wird ohne aufgerufen,onStart()
wenn die Aktivität aus dem Hintergrund fortgesetzt wirdWeitere Informationen finden Sie unter Android_activity_lifecycle_gotcha und Activity Lifecycle
quelle
Hoffentlich eine einfache Erklärung: -
am Start() -> wird aufgerufen, wenn die Aktivität sichtbar wird, aber möglicherweise nicht im Vordergrund steht (z. B. befindet sich ein AlertFragment oben oder ein anderer möglicher Anwendungsfall).
onResume () -> wird aufgerufen, wenn die Aktivität im Vordergrund steht oder der Benutzer mit der Aktivität interagieren kann.
quelle
onStart()
meintActivity
in den sichtbaren Zustand versetzt wurden, und das Layout werden erstellt, können jedoch nicht mit diesem Aktivitätslayout interagieren.Resume()
Das heißt, Sie können jetzt mit dem Aktivitätslayout interagieren.quelle
Beachten Sie, dass zwischen den Aufrufen von onStart () und onResume () Dinge passieren. Nämlich onNewIntent (), was ich schmerzhaft herausgefunden habe.
Wenn Sie das SINGLE_TOP-Flag verwenden und einige Daten mithilfe von Absichts-Extras an Ihre Aktivität senden, können Sie nur in onNewIntent () darauf zugreifen , das nach onStart () und vor onResume () aufgerufen wird. Normalerweise nehmen Sie die neuen (möglicherweise nur geänderten) Daten aus den Extras und legen sie auf einige Klassenmitglieder fest, oder verwenden setIntent (), um die neue Absicht als ursprüngliche Aktivitätsabsicht festzulegen und die Daten in onResume () zu verarbeiten.
quelle
Verweis auf http://developer.android.com/training/basics/activity-lifecycle/starting.html
onResume()
Wird aufgerufen, kurz bevor die Aktivität mit dem Benutzer interagiert. Zu diesem Zeitpunkt befindet sich die Aktivität oben im Aktivitätsstapel, und die Benutzereingaben werden dorthin geleitet. Immer gefolgt vononPause()
.onPause()
Wird aufgerufen, wenn das System eine weitere Aktivität wieder aufnehmen möchte. Diese Methode wird normalerweise verwendet, um nicht gespeicherte Änderungen an persistenten Daten festzuschreiben, Animationen zu stoppen und andere Dinge, die möglicherweise CPU verbrauchen, und so weiter. Es sollte alles sehr schnell tun, da die nächste Aktivität erst wieder aufgenommen wird, wenn sie zurückkehrt. Gefolgt von,onResume()
ob die Aktivität wieder in den Vordergrund zurückkehrt oderonStop()
ob sie für den Benutzer unsichtbar wird.quelle
Ich bin mir nicht sicher, ob dies als Antwort gilt - aber hier ist das YouTube-Video aus Googles Kurs (Entwickeln von Android-Apps mit Kotlin), das den Unterschied erklärt.
quelle