Was ist der Lebenszyklus einer Android-Aktivität? Warum sind so viele ähnlich klingendes Verfahren ( onCreate()
, onStart()
, onResume()
) während der Initialisierung genannt, und so viele andere ( onPause()
, onStop()
, onDestroy()
) am Ende genannt?
Wann werden diese Methoden aufgerufen und wie sollten sie richtig angewendet werden?
Antworten:
Sehen Sie es im Aktivitätslebenszyklus (bei Android-Entwicklern).
onCreate () :
onRestart () :
onStart () :
onResume () :
onPause () :
onStop () :
onDestroy () :
Wenn die Aktivität zum ersten Mal geladen wird, werden die Ereignisse wie folgt aufgerufen:
Wenn Sie auf die Schaltfläche Telefon klicken, wird die Aktivität in den Hintergrund gestellt und die folgenden Ereignisse werden aufgerufen:
Beenden Sie den Telefonwähler und die folgenden Ereignisse werden aufgerufen:
Wenn Sie auf die Schaltfläche Zurück klicken ODER versuchen, die Aktivität zu beenden (), werden die Ereignisse wie folgt aufgerufen:
Aktivitätszustände
Das Android-Betriebssystem verwendet eine Prioritätswarteschlange, um die Verwaltung der auf dem Gerät ausgeführten Aktivitäten zu unterstützen. Abhängig vom Status einer bestimmten Android-Aktivität wird ihr innerhalb des Betriebssystems eine bestimmte Priorität zugewiesen. Dieses Prioritätssystem hilft Android dabei, Aktivitäten zu identifizieren, die nicht mehr verwendet werden, und ermöglicht es dem Betriebssystem, Speicher und Ressourcen zurückzugewinnen. Das folgende Diagramm zeigt die Zustände, die eine Aktivität während ihrer Lebensdauer durchlaufen kann:
Diese Zustände können wie folgt in drei Hauptgruppen unterteilt werden:
Aktiv oder laufend - Aktivitäten gelten als aktiv oder laufend, wenn sie im Vordergrund stehen, auch als oberster Punkt des Aktivitätsstapels bezeichnet. Dies wird als Aktivität mit der höchsten Priorität im Android-Aktivitätsstapel angesehen und wird daher nur in extremen Situationen vom Betriebssystem beendet, z. B. wenn die Aktivität versucht, mehr Speicher zu verwenden, als auf dem Gerät verfügbar ist, da dies dazu führen kann, dass die Benutzeroberfläche dies tut nicht mehr reagieren.
Angehalten - Wenn das Gerät in den Ruhezustand wechselt oder eine Aktivität noch sichtbar ist, aber teilweise durch eine neue, nicht vollständige oder transparente Aktivität ausgeblendet wird, gilt die Aktivität als angehalten. Angehaltene Aktivitäten sind noch aktiv, dh sie verwalten alle Status- und Mitgliederinformationen und bleiben dem Fenstermanager zugeordnet. Dies wird als Aktivität mit der zweithöchsten Priorität im Android-Aktivitätsstapel angesehen und als solche nur vom Betriebssystem beendet, wenn das Beenden dieser Aktivität die Ressourcenanforderungen erfüllt, die erforderlich sind, um die aktive / laufende Aktivität stabil und reaktionsschnell zu halten.
Gestoppt - Aktivitäten, die durch eine andere Aktivität vollständig verdeckt sind, gelten als gestoppt oder im Hintergrund. Gestoppte Aktivitäten versuchen immer noch, ihre Status- und Mitgliedsinformationen so lange wie möglich beizubehalten. Gestoppte Aktivitäten werden jedoch als die niedrigste Priorität der drei Status angesehen. Daher beendet das Betriebssystem Aktivitäten in diesem Status zuerst, um die Ressourcenanforderungen zu erfüllen von Aktivitäten mit höherer Priorität.
* Beispielaktivität zum Verständnis des Lebenszyklus **
quelle
Aktivität hat sechs Zustände
Der Aktivitätslebenszyklus umfasst sieben Methoden
onCreate()
onStart()
onResume()
onPause()
onStop()
onRestart()
onDestroy()
Situationen
Beim Öffnen der App
Wenn Sie die Zurück-Taste gedrückt haben, beenden Sie die App
Wenn die Home-Taste gedrückt wird
Nachdem Sie die Home-Taste gedrückt haben, öffnen Sie die App erneut aus der Liste der letzten Aufgaben oder klicken Sie auf das Symbol
Beim Öffnen einer App wird eine andere App über die Benachrichtigungsleiste oder die Einstellungen geöffnet
Wenn Sie die Zurück-Taste einer anderen App oder der dann verwendeten Einstellungen drücken, wird unsere App angezeigt
Wenn ein Dialog auf dem Bildschirm geöffnet wird
Nachdem Sie den Dialog oder die Schaltfläche "Zurück" aus dem Dialog entfernt haben
Jedes Telefon klingelt und Benutzer in der App
Wenn der Benutzer die Antworttaste des Telefons gedrückt hat
Nach Anrufende
Wenn der Bildschirm des Telefons ausgeschaltet ist
Wenn der Bildschirm wieder eingeschaltet wird
quelle
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
ANDROID LEBENSZYKLUS
Es gibt sieben Methoden, die den Lebenszyklus einer Android-Anwendung verwalten:
Antwort für was sind all diese Methoden für:
Nehmen wir ein einfaches Szenario, in dem wir wissen, in welcher Reihenfolge diese Methoden aufgerufen werden, um zu verdeutlichen, warum sie verwendet werden.
onCreate()
- - -> - - ->onStart()
onResume()
onPause()
- - ->onStop()
onRestart()
- - -> - - ->onStart()
onResume()
onStop()
- - ->onDestroy()
Es gibt vier Zustände, in denen eine Aktivität möglicherweise existieren kann:
Der Ausgangszustand beinhaltet:
Erstellen eines neuen Linux-Prozesses, Zuweisen von neuem Speicher für die neuen UI-Objekte und Einrichten des gesamten Bildschirms. Der größte Teil der Arbeit ist hier involviert.
Der Betriebszustand beinhaltet:
Es ist die Aktivität (Status), die derzeit auf dem Bildschirm angezeigt wird. Dieser Status allein behandelt Dinge wie das Tippen auf dem Bildschirm und das Berühren und Klicken von Schaltflächen.
Der angehaltene Zustand beinhaltet:
Wenn sich eine Aktivität nicht im Vordergrund und stattdessen im Hintergrund befindet, wird die Aktivität als angehalten bezeichnet.
Der gestoppte Zustand beinhaltet:
Eine gestoppte Aktivität kann nur durch Neustart in den Vordergrund gekauft und zu jedem Zeitpunkt zerstört werden.
Der Aktivitätsmanager behandelt alle diese Zustände so, dass die Benutzererfahrung und Leistung auch in Szenarien, in denen die neue Aktivität zu den vorhandenen Aktivitäten hinzugefügt wird, immer optimal ist
quelle
Ich mag diese Frage und die Antworten darauf, aber bisher werden weniger häufig verwendete Rückrufe wie onPostCreate () oder onPostResume () nicht behandelt . Steve Pomeroy hat unter https://github.com/xxv/android-lifecycle ein Diagramm versucht, das diese und ihre Beziehung zum Fragment- Lebenszyklus von Android enthält . Ich habe Steves großes Diagramm so überarbeitet, dass es nur den Aktivitätsteil enthält, und es für den einseitigen Ausdruck im Letter-Format formatiert. Ich habe es als Text-PDF unter https://github.com/code-read/android-lifecycle/blob/master/AndroidActivityLifecycle1.pdf veröffentlicht und unten ist das Bild:
quelle
Auf der Android-Entwicklerseite
onPause ():
onStop ():
Angenommen, es gibt drei Aktivitäten und Sie gehen von A nach B, dann wird onPause von A jetzt von B nach C aufgerufen, dann wird onPause von B und onStop von A aufgerufen.
Die angehaltene Aktivität wird fortgesetzt und die gestoppte Aktivität wird neu gestartet.
Wenn Sie aufrufen
this.finish()
, wird onPause-onStop-onDestroy aufgerufen. Das Wichtigste, an das Sie sich erinnern sollten, ist: Angehaltene Aktivitäten werden gestoppt und eine angehaltene Aktivität wird zerstört, wenn Android Speicher für andere Vorgänge benötigt.Ich hoffe es ist klar genug.
quelle
Hinzufügen weiterer Informationen zu hoch bewerteten Antworten (Zusätzlicher Abschnitt von KILLABLE und nächste Methoden, die im Lebenszyklus aufgerufen werden sollen) hinzugefügt:
Quelle: developer.android.com
Beachten Sie die Spalte " Killable " in der obigen Tabelle. Für Methoden, die als Killable markiert sind, kann der Prozess, der die Aktivität hostet, jederzeit vom System abgebrochen werden, ohne dass eine weitere Zeile des Codes ausgeführt wird.
Aus diesem Grund sollten Sie die
onPause()
Methode verwenden, um persistente Daten (z. B. Benutzeränderungen) in den Speicher zu schreiben. Darüber hinaus wird die MethodeonSaveInstanceState(Bundle)
aufgerufen, bevor die Aktivität in einen solchen Hintergrundstatus versetzt wird. Auf diese Weise können Sie jeden dynamischen Instanzstatus in Ihrer Aktivität in dem angegebenen Status speichernBundle
und später empfangen,onCreate(Bundle)
wenn die Aktivität neu erstellt werden muss.Beachten Sie, dass es wichtig ist, persistente Daten zu speichern,
onPause()
anstattonSaveInstanceState(Bundle)
dass letztere nicht Teil der Lebenszyklus-Rückrufe sind und daher nicht in jeder Situation aufgerufen werden, wie in der Dokumentation beschrieben.Ich möchte noch einige Methoden hinzufügen. Diese sind nicht als Lebenszyklusmethoden aufgeführt, werden jedoch abhängig von bestimmten Bedingungen während des Lebenszyklus aufgerufen. Abhängig von Ihren Anforderungen müssen Sie diese Methoden möglicherweise in Ihrer Anwendung implementieren, um den Status ordnungsgemäß zu behandeln.
Mein Anwendungscode mit all diesen Methoden:
Anmeldeaktivität:
Ausgabe: (Vor Pause)
Ausgabe: (Nach Wiederaufnahme der Pause)
Beachten Sie, dass dies
onPostResume()
aufgerufen wird, obwohl es nicht als Lebenszyklusmethode angegeben ist.quelle
Ich führe einige Protokolle gemäß den obigen Antworten aus und hier ist die Ausgabe:
Aktivität starten
Beenden der Aktivität
Meiner persönlichen Meinung nach sind nur zwei onStart und onStop erforderlich.
onResume scheint in jedem Fall des Zurückkommens und onPause in jedem Fall des Verlassens zu sein (außer beim Schließen der App).
quelle