454 Stimmen

Lebenszyklus von Android-Aktivitäten - wozu dienen all diese Methoden?

Was ist der Lebenszyklus einer Android-Aktivität? Warum sind so viele ähnlich klingende Methoden ( onCreate() , onStart() , onResume() ), die während der Initialisierung aufgerufen werden, und so viele andere ( onPause() , onStop() , onDestroy() ) am Ende aufgerufen?

Wann werden diese Methoden aufgerufen, und wie sollten sie richtig eingesetzt werden?

21 Stimmen

Warum wurde diese Frage so oft hochgestuft? Warum wurde sie nicht geschlossen?

62 Stimmen

Warum wird eine Frage mit vielen positiven Bewertungen geschlossen? Stackoverflow hat eine schlechte Angewohnheit, das zu tun.

15 Stimmen

Dies ist eine Frage im Wiki-Stil, und ich denke, sie sollte auf der Website erlaubt sein.

784voto

Yaqub Ahmad Punkte 27316

Siehe in Lebenszyklus der Aktivität (bei Android Developers).

Enter image description here

onCreate() :

Wird aufgerufen, wenn die Aktivität zum ersten Mal erstellt wird. An dieser Stelle sollten Sie alle normalen statischen Einstellungen vornehmen: Ansichten erstellen, Daten an Listen binden, usw. Diese Methode liefert Ihnen auch ein Bundle, das die Zustand der Aktivität enthält, falls es einen solchen gab. Immer gefolgt von onStart().

onRestart() :

Wird aufgerufen, nachdem Ihre Aktivität gestoppt wurde, bevor sie gestartet wird wieder. Immer gefolgt von onStart()

onStart() :

Wird aufgerufen, wenn die Aktivität für den Benutzer sichtbar wird. Gefolgt von onResume(), wenn die Aktivität in den Vordergrund kommt.

onResume() :

Wird aufgerufen, wenn die Aktivität beginnt, mit dem Benutzer zu interagieren. Zu diesem befindet sich Ihre Aktivität an der Spitze des Aktivitätsstapels, wobei Benutzereingaben zu ihr. Immer gefolgt von onPause().

onPause () :

Wird als Teil des Lebenszyklus einer Aktivität aufgerufen, wenn eine Aktivität in den Hintergrund geht, aber (noch) nicht beendet worden ist. Das Gegenstück zu onResume(). Wenn die Aktivität B vor der Aktivität A gestartet wird, wird dieser Callback auf A aufgerufen. B wird nicht erstellt, bis A's onPause() r hier nichts Langwieriges zu tun.

onStop() :

Wird aufgerufen, wenn Sie für den Benutzer nicht mehr sichtbar sind. Sie werden als nächstes entweder onRestart(), onDestroy() oder gar nichts erhalten, je nach [ ] Beachten Sie, dass diese Methode in Situationen mit wenig Speicher nie aufgerufen werden kann wo das System nicht genug Speicher hat, um Ihre Aktivität zu halten Prozess nach dem Aufruf der onPause()-Methode am Laufen zu halten.

onDestroy() :

Der letzte Anruf, den Sie erhalten, bevor Ihre Aktivität zerstört wird. Dieser kann entweder passieren, weil die Aktivität beendet wird (jemand hat finish() aufgerufen hat, oder weil das System vorübergehend diese Instanz der Aktivität vorübergehend zerstört, um Platz zu sparen. Sie können mit der Methode isFinishing() zwischen> diesen beiden Szenarien unterscheiden.

Wenn die Aktivität Erstmalige Belastungen werden die Ereignisse wie folgt aufgerufen:

onCreate()
onStart()
onResume()

Wenn Sie Klicken Sie auf die Schaltfläche Telefon wird die Aktivität in den Hintergrund gestellt und die folgenden Ereignisse werden aufgerufen:

onPause()
onStop()

Beenden Sie das Telefonwählprogramm und die folgenden Ereignisse werden aufgerufen:

onRestart()
onStart()
onResume()

Wenn Sie auf die Schaltfläche Zurück-Taste ODER versuchen Sie beenden() die Aktivität werden die Ereignisse wie folgt genannt:

onPause()
onStop()
onDestroy()

Tätigkeitsstaaten

Das Android-Betriebssystem verwendet eine Prioritätswarteschlange, um die Verwaltung der auf dem Gerät laufenden Aktivitäten zu unterstützen. Je nachdem, in welchem Zustand sich eine bestimmte Android-Aktivität befindet, wird ihr eine bestimmte Priorität innerhalb des Betriebssystems 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 veranschaulicht die Zustände, die eine Aktivität während ihrer Lebensdauer durchlaufen kann:

Diese Zustände lassen sich in drei Hauptgruppen unterteilen:

Aktiv oder Laufend - Aktivitäten gelten als aktiv oder laufen, wenn sie sich im Vordergrund befinden, auch bekannt als die Spitze des Aktivitätsstapels. Dies ist die Aktivität mit der höchsten Priorität im Android-Aktivitätsstapel und wird als solche 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 könnte, dass die Benutzeroberfläche nicht mehr reagiert.

Pausiert - Wenn das Gerät in den Ruhezustand geht oder eine Aktivität noch sichtbar ist, aber teilweise von einer neuen, nicht vollständigen oder transparenten Aktivität verdeckt wird, gilt die Aktivität als pausiert. Pausierte Aktivitäten sind noch aktiv, d. h. sie behalten alle Status- und Mitgliederinformationen bei und bleiben mit dem Windowmanager verbunden. Sie gilt als die Aktivität mit der zweithöchsten Priorität im Android-Aktivitätsstapel und wird als solche nur dann vom Betriebssystem beendet, wenn das Beenden dieser Aktivität die Ressourcenanforderungen erfüllt, die erforderlich sind, um die aktive/laufende Aktivität stabil und ansprechbar zu halten.

Gestoppt - Aktivitäten, die vollständig von einer anderen Aktivität verdeckt werden, gelten als gestoppt oder im Hintergrund. Gestoppte Aktivitäten versuchen immer noch, ihren Status und ihre Mitgliederinformationen so lange wie möglich zu behalten, aber gestoppte Aktivitäten werden als die niedrigste Priorität der drei Zustände betrachtet, und als solche wird das Betriebssystem Aktivitäten in diesem Zustand zuerst beenden, um den Ressourcenbedarf von Aktivitäten mit höherer Priorität zu befriedigen.

*Musteraktivität zum Verständnis des Lebenszyklus**

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
    String tag = "LifeCycleEvents";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       Log.d(tag, "In the onCreate() event");
    }
    public void onStart()
    {
       super.onStart();
       Log.d(tag, "In the onStart() event");
    }
    public void onRestart()
    {
       super.onRestart();
       Log.d(tag, "In the onRestart() event");
    }
    public void onResume()
    {
       super.onResume();
       Log.d(tag, "In the onResume() event");
    }
    public void onPause()
    {
       super.onPause();
       Log.d(tag, "In the onPause() event");
    }
    public void onStop()
    {
       super.onStop();
       Log.d(tag, "In the onStop() event");
    }
    public void onDestroy()
    {
       super.onDestroy();
       Log.d(tag, "In the onDestroy() event");
    }
}

185voto

Arun Kumar Punkte 2814

Aktivität hat sechs Zustände

  • Erstellt
  • Gestartet
  • Fortgesetzt
  • Pausiert
  • Gestoppt
  • Zerstörte

Lebenszyklus der Aktivität hat sieben Methoden

  • onCreate()
  • onStart()
  • onResume()
  • onPause()
  • onStop()
  • onRestart()
  • onDestroy()

activity life cycle

Situationen

  • Wenn Sie die App öffnen

    onCreate() --> onStart() -->  onResume()
  • Beim Drücken der Zurück-Taste und Beenden der App

    onPaused() -- > onStop() --> onDestory()
  • Wenn die Home-Taste gedrückt wird

    onPaused() --> onStop()
  • Nach dem Drücken der Home-Taste beim erneuten Öffnen einer Anwendung aus der Liste der letzten Aufgaben oder durch Klicken auf das Symbol

    onRestart() --> onStart() --> onResume()
  • Beim Öffnen einer anderen Anwendung über die Benachrichtigungsleiste oder in den Einstellungen

    onPaused() --> onStop()
  • Zurück-Taste aus einer anderen App oder Einstellungen gedrückt, dann verwendet werden können unsere App zu sehen

    onRestart() --> onStart() --> onResume()
  • Wenn ein Dialog auf dem Bildschirm geöffnet ist

    onPause()
  • Nach dem Verlassen des Dialogs oder der Zurück-Taste aus dem Dialog

    onResume()
  • Ein beliebiges Telefon klingelt und der Benutzer ist in der App

    onPause() --> onResume() 
  • Wenn der Benutzer die Antworttaste des Telefons gedrückt hat

    onPause()
  • Nach Anrufende

    onResume()
  • Wenn der Bildschirm des Telefons ausgeschaltet ist

    onPaused() --> onStop()
  • Wenn der Bildschirm wieder eingeschaltet wird

    onRestart() --> onStart() --> onResume()

163voto

Nilesh Pawar Punkte 3845

Die ganze Verwirrung wird dadurch verursacht, dass Google nicht-intuitive Namen gewählt hat, anstatt etwas wie das Folgende:

onCreateAndPrepareToDisplay()   [instead of onCreate() ]
onPrepareToDisplay()            [instead of onRestart() ]
onVisible()                     [instead of onStart() ]
onBeginInteraction()            [instead of onResume() ]
onPauseInteraction()            [instead of onPause() ]
onInvisible()                   [instead of onStop]
onDestroy()                     [no change] 

Das Aktivitätsdiagramm kann wie folgt interpretiert werden:

enter image description here

24voto

Devrath Punkte 39521

Android LEBENSZYKLUS

Es gibt sieben Methoden, die den Lebenszyklus einer Android-Anwendung verwalten:


Antwort auf die Frage, wozu all diese Methoden gut sind:

Nehmen wir ein einfaches Szenario, bei dem das Wissen, in welcher Reihenfolge diese Methoden aufgerufen werden, uns helfen wird, Klarheit zu schaffen, warum sie verwendet werden.

  • Angenommen, Sie verwenden eine Taschenrechner-App. Drei Methoden werden nacheinander aufgerufen nacheinander aufgerufen, um die App zu starten.

onCreate() - - - > onStart() - - - > onResume()

  • Wenn ich die Taschenrechner-App benutze, kommt plötzlich ein Anruf. Die Taschenrechneraktivität geht in den Hintergrund und eine andere Aktivität, z. B.. Die Aktivität, die sich mit dem Anruf befasst, tritt in den Vordergrund, und nun werden zwei Methoden nacheinander aufgerufen.

onPause() - - - > onStop()

  • Angenommen, ich beende das Gespräch am Telefon, der Taschenrechner Aktivität aus dem Hintergrund in den Vordergrund, so dass drei Methoden nacheinander aufgerufen werden.

onRestart() - - - > onStart() - - - > onResume()

  • Angenommen, ich habe alle Aufgaben in der Taschenrechner-App erledigt und möchte möchte die App beenden. Es werden zwei weitere Methoden nacheinander aufgerufen.

onStop() - - - > onDestroy()


Es gibt vier Zustände, in denen eine Aktivität existieren kann:

  • Startzustand
  • Laufender Zustand
  • Pausierter Zustand
  • Angehaltener Zustand

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 also hier zu finden.

Laufender Zustand beinhaltet:

Es ist die Aktivität (der Zustand), die gerade auf dem Bildschirm zu sehen ist. Dieser Zustand allein steuert Dinge wie das Tippen auf dem Bildschirm und das Berühren und Klicken von Schaltflächen.

Der Pausenzustand beinhaltet:

Wenn sich eine Aktivität nicht im Vordergrund, sondern im Hintergrund befindet, wird sie als pausiert bezeichnet.

Der gestoppte Zustand beinhaltet:

Eine angehaltene Aktivität kann nur durch einen Neustart wieder in den Vordergrund geholt werden und sie kann auch zu jedem beliebigen Zeitpunkt zerstört werden.

Der Aktivitätsmanager behandelt all diese Zustände so, dass die Benutzererfahrung und die Leistung immer optimal sind, selbst in Szenarien, in denen die neue Aktivität zu den bestehenden Aktivitäten hinzugefügt wird.

17voto

CODE-REaD Punkte 2473

Ich mag diese Frage und die Antworten darauf, aber bisher gibt es keine Abdeckung der weniger häufig verwendeten Rückrufe wie onPostCreate() ou onPostResume() . Steve Pomeroy hat versucht, ein Diagramm zu erstellen, das diese Elemente und ihre Beziehung zu den Android-Funktionen enthält. Fragment Lebenszyklus, bei https://github.com/xxv/Android-lifecycle . Ich habe das große Diagramm von Steve überarbeitet und nur die Tätigkeit Teil und formatierte ihn für einen einseitigen Ausdruck in Briefgröße. Ich habe ihn als Text-PDF unter https://github.com/code-read/Android-lifecycle/blob/master/AndroidActivityLifecycle1.pdf und unten ist sein Bild:

Android Activity Lifecycle

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X