Was ist der Android-Aktivitätslebenszyklus?

In meinem letzten Beitrag haben Sie erfahren, dass Intents uns Nachrichten von einer Android-Komponente an eine andere senden lässt. Nun, eine sehr wichtige Komponente ist eine Aktivität. 

Aktivitäten sind ein wesentlicher Bestandteil der Android-App-Entwicklung. Und es ist unmöglich, Aktivitäten zu verstehen, ohne auch deren Lebenszyklen zu verstehen. In diesem Beitrag erfahren Sie alles über den Aktivitätslebenszyklus.

Aktivitätslebenszyklus

Eine Aktivität ist ein einzelner Bildschirm in Android. Es ist wie ein Fenster in einer Desktop-App oder ein Frame in einem Java-Programm. Bei einer Aktivität können Sie alle Ihre UI-Komponenten oder Widgets gemeinsam auf dem Bildschirm platzieren.

Es ist wichtig zu verstehen, dass eine Aktivität einen Lebenszyklus hat. Dies bedeutet, dass sich die Aktivität in einem von mehreren Zuständen befinden kann, abhängig davon, was mit der App und der Benutzerinteraktion geschieht. 

Lebenszyklusmethoden

Schauen wir uns den Lebenszyklus einer Android-Aktivität genauer an. Bei jeder Änderung des Aktivitätsstatus wird eine der folgenden Lebenszyklusmethoden für die Aktivitätsklasse aufgerufen. 

onCreate (): Wird aufgerufen, wenn die Aktivität zum ersten Mal initialisiert wird. Sie müssen diese Methode implementieren, um eine für Ihre Aktivität spezifische Initialisierung durchzuführen.

am Start(): Dies ist das erste Mal, wenn die Aktivität für den Benutzer sichtbar wird, da sich die Aktivität darauf vorbereitet, in den Vordergrund zu treten, interaktiv zu werden. Sobald dieser Rückruf beendet ist, wird die auf Wiederaufnahme() Methode wird aufgerufen.

auf Wiederaufnahme(): Wenn die Aktivität in diesen Status wechselt, beginnt sie mit dem Benutzer zu interagieren. Die Aktivität wird in diesem Zustand fortgesetzt, bis etwas von der App oder der Aktivität den Fokus hat (z. B. ein eingehender Anruf). Wenn dies geschieht, wird die onPause () Methode wird aufgerufen.

onPause (): Diese Methode wird zum Anhalten von Vorgängen verwendet, die nicht auftreten dürfen, wenn sich die Aktivität im angehaltenen Zustand befindet. Ein Aufruf dieser Methode zeigt an, dass der Benutzer die App verlässt. In einer Musik-Player-App bewirkt ein eingehender Anruf beispielsweise, dass die App in einen angehaltenen Zustand übergeht. Dies sollte die aktuell abgespielte Musik stummschalten oder anhalten. Wenn der Benutzer zur App zurückkehrt, wird die auf Wiederaufnahme() Methode wird aufgerufen.

onStop (): Diese Methode wird aufgerufen, wenn die Aktivität in der App nicht mehr sichtbar ist. Dies kann beispielsweise der Fall sein, wenn eine andere Aktivität geladen wurde und der gesamte Bildschirm des Geräts angezeigt wird. Wenn diese Methode aufgerufen wird, befindet sich die Aktivität im gestoppten Zustand. In diesem Zustand ruft das System entweder die onRestart () Interaktivität mit Activity zurückbringen. Oder nennt es das onDestroy () Methode, um die Aktivität zu zerstören.

onDestroy (): Dies wird aufgerufen, bevor die Aktivität zerstört wird. Das System ruft diese Methode auf, wenn ein Benutzer die Aktivität beendet oder der Prozess, der die Aktivität enthält, vorübergehend zerstört wird, um Speicherplatz zu sparen. Stellen Sie sicher, dass Sie alle Ressourcen freigeben, die Ihre Activity mit dieser Methode erstellt hat. Andernfalls hat Ihre App einen Speicherverlust!

onRestart (): Wird aufgerufen, wenn eine Aktivität nach dem Stoppen neu gestartet wird.

Aktivität starten

Bei den meisten Benutzerinteraktionen mit einer App wird die aktive Aktivität geändert. So wechselt eine App während ihrer Lebensdauer viele Male zwischen Aktivitäten.

Aktivitäten müssen miteinander verknüpft werden, wenn eine Aktivität eine andere Aktivität starten muss. Um eine Aktivität zu starten, verwenden Sie entweder startActivity () oder startActivityForResult (). In beiden Fällen müssen Sie eine Absicht bestehen.

Starten einer Aktivität ohne erwartetes Ergebnis

startActivity () wird verwendet, wenn die neu gestartete Aktivität kein Ergebnis zurückgeben muss.

Der folgende Codeausschnitt zeigt, wie eine andere Aktivität mit dieser Methode gestartet wird:

Intent Intent = New Intent (diese, SecondActivity.class); startActivity (Absicht);

Sie können auch Aktionen ausführen, z. B. Daten von einer Aktivität an eine andere übergeben. In diesem Fall möchte Ihre aktuelle Aktivität (die aufrufende Aktivität) eine Zielaktivität an Daten übergeben. Dies ist, wo Intents nützlich sind. Weitere Informationen zur Verwendung von Intents zum Starten einer Aktivität finden Sie in meinem vorherigen Artikel.

Starten einer Aktivität mit einem Ergebnis

startActivityForResult () wird zum Starten einer anderen Aktivität verwendet und erwartet, dass Daten von der neu gestarteten Aktivität zurückerhalten werden. Verwenden Sie diese Option also, wenn Sie ein Ergebnis von der Zielaktivität zur aufrufenden Aktivität zurückholen möchten, z. Wenn die Zielaktivität einige Benutzerinformationen in einem modalen Dialogfeld erfasst.

Sie erhalten das Ergebnis aus der Aktivität in der onActivityResult (int requestCode, int resultCode, Intent-Daten) Methode. Das Ergebnis wird als Absicht zurückgegeben.

Beispiel für das Starten einer Aktivität

Hier ein Beispiel, um zu zeigen, wie das Starten einer Aktivität funktioniert.

Zuerst erstellen Sie Ihre Hauptaktivität mit Ihrer onCreate () Methode, eine Layoutdatei und einen Anforderungscode.

 public class MainActivity erweitert Activity // Eindeutiger Anforderungscode für jeden Anwendungsfall private static final int REQUEST_CODE_EXAMPLE = 0x9345; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); 

In deiner onCreate () Sie erstellen eine neue Instanz einer Absicht, um Ihre zweite Aktivität zu starten. 

Wenn Sie bereit sind, diese Aktivität zu starten, beispielsweise als Reaktion auf einen Tastenklick, rufen Sie an startActivityForResult (), die die neu erstellte Absicht und den Anforderungscode übergeben.

 // Neue Instanz von Intent erstellen, um SecondActivity zu starten final Intent intent = new Intent (this, SecondActivity.class); // Dies startet SecondActivity mit dem Anforderungscode startActivityForResult (intent, REQUEST_CODE_EXAMPLE);

Trotzdem in deiner Hauptaktivität, Sie müssen Aktivitätsergebnisereignisse behandeln. Sie tun dies, indem Sie das implementieren onActivityResult ()  Methode. So erhalten Sie das Ergebnis aus der anderen Aktivität. 

So sollte es aussehen:

 // onActivityResult wird nur aufgerufen // wenn die andere Activity zuvor mit startActivityForResult gestartet wurde @Override public void onActivityResult (int requestCode, int resultCode, Intent data) super.onActivityResult (requestCode, resultCode, data); // Zuerst müssen wir überprüfen, ob der requestCode mit dem von uns verwendeten Code übereinstimmt. if (requestCode == REQUEST_CODE_EXAMPLE) // Der resultCode wird von der SecondActivity festgelegt. // RESULT_OK bedeutet, dass das, was // SecondActivity ausgeführt hat, erfolgreich ausgeführt wurde, wenn (resultCode == Activity.RESULT_OK) // das Ergebnis vom zurückgegebenen Ergebnis abruft Intent final String result = data.getStringExtra (SecondActivity.EXTRA_DATA); // Verwenden Sie die Daten - in diesem Fall zeigen Sie sie in einem Toast an. Toast.makeText (dies "Ergebnis:" + Ergebnis, Toast.LENGTH_LONG) .show ();  else // setResult wurde von SecondActivity nicht erfolgreich ausgeführt // Aufgrund eines Fehlers oder Kontrollflusses. Keine Daten abgerufen. 

Nun machen Sie weiter und erstellen Sie Ihre SecondActivity. Es sollte ungefähr so ​​aussehen wie der Code unten.

 @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_detail); letzte Schaltfläche button = (Button) findViewById (R.id.button); // Wenn diese Schaltfläche angeklickt wird, möchten wir ein Ergebnis zurückgeben button.setOnClickListener (new View.OnClickListener () @Override public void onClick (View view) // Erstellen eines neuen Intent-Objekts als Container für das Ergebnis final Intent data = new Intent (); // Fügen Sie die erforderlichen Daten hinzu, die an MainActivity data.putExtra (EXTRA_DATA, "Einige interessante Daten!") zurückgegeben werden sollen; // Setzen Sie den resultCode als Activity.RESULT_OK, um // einen Erfolg anzuzeigen und den Intent anzuhängen // das unser Ergebnis enthält dataResult (Activity.RESULT_OK, data); // Mit finish () schließen wir die SecondActivity um // zurück zu MainActivity zurückzukehren finish ();; 

Aktivität beenden

Bevor eine Aktivität endet, werden die entsprechenden Lebenszyklusmethoden aufgerufen.

Das onPause () Diese Methode sollte alle Listener- und UI-Updates stoppen. Das onStop () Methode sollte die Anwendungsdaten speichern. Endlich, das onDestroy () Diese Methode gibt alle Ressourcen frei, die von der Aktivität zugewiesen wurden. 

Wenn der Benutzer zu einer App wechselt, die vom System beendet wurde, auf Wiederaufnahme() Methode wird aufgerufen. Basierend auf gespeicherten Daten kann es Listener erneut registrieren und Aktualisierungen der Benutzeroberfläche auslösen.

Aktivitätsinstanzstatus

Eine Aktivität erfordert eine Möglichkeit, wertvolle Status- und Benutzerdaten, die sie erhalten hat, beizubehalten. Diese Daten können aus Benutzereingaben abgerufen oder erstellt werden, während die Aktivität nicht auf dem Bildschirm angezeigt wurde.

Beispielsweise kann eine Änderung der Geräteorientierung dazu führen, dass eine Aktivität zerstört und neu erstellt wird. In einem solchen Szenario müssen Sie sicherstellen, dass Sie den gesamten Aktivitätsstatus speichern, bevor er gelöscht wird, und ihn erneut laden, wenn er neu erstellt wird. Andernfalls können alle Daten, die Ihre Aktivität zu diesem Zeitpunkt hat, vollständig verloren gehen.

Um den Aktivitätsstatus zu speichern, können Sie das überschreiben onSaveInstanceState () Methode. Diese Methode wird a übergeben Bündeln Objekt als Parameter. Ein Bundle kann Strings, primitive Datentypen oder Objekte enthalten. Bei dieser Methode fügen Sie einfach alle wichtigen Statusdaten zum Bundle hinzu. Dieses Paket wird später an die Aktivität zurückgegeben, sodass Sie den Aktivitätsstatus wiederherstellen können.

Um den gespeicherten Status aus dem Bundle zu extrahieren und wiederherzustellen, implementieren Sie das onRestoreInstanceState () Methode. Dieser Rückruf wird zwischen aufgerufen am Start() und das auf Wiederaufnahme() Lebenszyklusmethoden.

In einem zukünftigen Artikel werden wir den Status der Aktivitätsinstanz genauer untersuchen.

Fazit

Nachdem Sie diesen Beitrag verfolgt haben, haben Sie ein gutes Verständnis dafür, wie ein Aktivitätslebenszyklus funktioniert. Sie haben gelernt, dass es zwei Möglichkeiten gibt, eine Aktivität zu starten, sowie Hinweise darauf zu geben, wie der Instanzstatus im Aktivitätslebenszyklus gehandhabt wird.

Vielen Dank für das Lesen und während Sie hier sind, lesen Sie einige unserer anderen Beiträge zum Codieren von Android-Apps.