Der Aktivitätszyklus von Android nach dem Beenden des Ruhezustands

8

Wenn eine Aktivität auf dem Bildschirm angezeigt wird und eine Schaltfläche mit einem Klick-Listener verknüpft ist, wird diese während der onCreate-Methode an die Schaltfläche angehängt. Anschließend wechselt das Gerät in den Energiesparmodus (oder der Benutzer tippt auf Power-Taste, um den Bildschirm auszuschalten), wenn der Bildschirm wieder auf der Aktivität ist immer noch sichtbar, wie es vor dem Schlaf-Modus war.

Das onResume wird aufgerufen, das als Teil des Lebenszyklus einer Aktivität dokumentiert wird. Was ich nicht verstehe ist, warum der onCreate nicht erneut aufgerufen wird. Wie ist es möglich, dass der Klick-Listener der Schaltfläche auch nach dem Verlassen des Schlafmodus funktioniert? Sie würden denken, dass Android alle laufenden Prozesse gelöscht hat, die mit der Aktivität verbunden sind, die den Klick-Listener der Schaltfläche enthält.

    
AndroidDev 06.07.2013, 06:32
quelle

4 Antworten

1

Was meinst du mit, warum wird das onCreate() nicht erneut aufgerufen?

Einfache Antwort: Ihre Aktivität wird nicht zerstört, wenn der Bildschirm ausgeschaltet wird. Es gibt also keinen Grund, dass onCreate() erneut aufgerufen wird.

Wenn der Bildschirm des Telefons ausgeschaltet ist, wird der onPause() -Rückruf der Aktivität aufgerufen, gefolgt von onStop() . Nur weil onStop() erreicht wird, bedeutet das nicht, dass onDestroy() immer erreicht wird. Zumindest nach meinem Verständnis versucht das Betriebssystem von Android, so viel Speicher wie möglich zu verwenden, so dass Apps schneller geladen werden usw. (dies ist eine echte Vereinfachung, aber ich glaube, das ist die allgemeine Idee). Das bedeutet, dass Ihre Aktivität immer noch im Speicher vorhanden ist, wenn der Bildschirm ausgeschaltet wird (zumindest am Anfang). Nur wenn das System wirklich die Ressourcen benötigt, die Ihre Aktivität enthält, ruft es die onDestroy() Ihrer Aktivität auf. Aus diesem Grund funktioniert der Klick-Listener weiterhin, wenn Sie den Bildschirm ausschalten. Ihre Aktivität ist noch im Speicher vorhanden, dh Ihr Tasten-Listener ist auch weiterhin registriert.

Ich denke, es ist wichtig, darauf hinzuweisen, dass der Schlafmodus und das Ausschalten des Bildschirms nicht identisch sind. Wenn Sie den Bildschirm ausschalten, wird er möglicherweise sofort in den Energiesparmodus versetzt. Wenn der Bildschirm ausgeschaltet wird, aber noch nicht in den Energiesparmodus wechselt, funktioniert die CPU weiterhin und der Dienst läuft noch. Wenn das Telefon in den Ruhezustand wechselt, schaltet es die CPU aus und im Wesentlichen alle Prozesse "einfrieren", und als Ergebnis alle services auch. Durch die Verwendung von Wakelocks wird verhindert, dass das Telefon in den Energiesparmodus wechselt. Daher werden die Dienste auch dann ausgeführt, wenn der Bildschirm des Telefons für längere Zeit ausgeschaltet ist. Wenn Sie es noch nicht gelesen haben, ist die Service -Referenz ziemlich gut Info. Es beschreibt auch seinen Lebenszyklus und wie Android seine Speichernutzung priorisiert.

    
btse 06.07.2013 07:17
quelle
0

Android Activity Lifecycle ist extrem kompliziert und sogar Romain Guy behauptet, er verstehe es nicht vollständig danach viele Jahre Kernentwicklung auf Android. Sie können davon ausgehen, dass Android OS den Lebenszyklus Ihrer Aktivitäten beeinträchtigen kann, wie es im Hintergrund aussieht. Der Aktivitäts-Lebenszyklus repräsentiert das tatsächliche Verhalten nur sehr grob, meistens habe ich durch Erfahrung und Trail mein Verständnis verstanden und Fehler.

In deinem Fall, wenn du deine Aktivität im Hintergrund verschickst, wenn Android RAM zur Verfügung hat, versucht es, deine Aktivität im RAM zu halten, also geht es durch onPause und onStop. Jetzt kann dieser Zustand bestehen bleiben, bis Sie zu Ihrer App zurückkehren, dann wird er onStart und onResume durchlaufen, da alle Ihre Referenzen / Felder, die Sie onCreate erstellt haben, noch existieren und "wiederverwendet" werden können. Auf der anderen Seite, wenn das Betriebssystem entscheidet, dass es mehr Speicher benötigt, kann es Ihre Aktivität zerstören und wird für die Garbage Collection geöffnet und wird auch den onDestroy () Lebenszyklus durchlaufen. Beim nächsten Öffnen der App wird eine neue Aktivität mit dem Status onSaveInstanceState () erstellt und der gesamte Lebenszyklus von onCreate () wird durch

ausgeführt

Bei Dienstleistungen ist es das Gleiche. Useally Service sollte nicht über lange Zeit laufen, sie sollten sich auch sofort stoppen, nachdem sie fertig sind. Wenn also das OS einen Dienst findet, der über längere Zeit im Hintergrund läuft, versucht es, es zu löschen, um Batterie / RAM nach einem beliebigen Zeitraum zu sparen (und vielleicht sind andere Parameter in dieser Entscheidung enthalten). Auf der anderen Seite, wenn Sie einen lang andauernden Dienst benötigen, müssen Sie manuell ein Wakelock auf das Betriebssystem "Ich brauche das getan, egal was" gemacht.

    
for3st 06.07.2013 13:23
quelle
0

Wenn Sie den Netzschalter oder die Home-Taste drücken, legt Android OS Ihre aktuelle Aktivität auf den Backstack. Der Grund, warum onCreate nicht erneut aufgerufen wird, ist, dass es zum Erstellen von Ansichten und zum Ausführen von Speicheroperationen wie dem Laden Ihres XML-Layouts in Aktivität verwendet wird. Das System funktioniert so, dass Sie nicht jedes Mal Speicher zuweisen müssen, wenn Sie auf diese Seite kommen nur wenn Sie die Seite erstellt haben.onResume wird aufgerufen, weil Sie wieder zu derselben Aktivität zurückkehren. Memroy Management ist sehr wichtig in Android, da es ein mobiles Betriebssystem ist.

    
kaushal trivedi 06.07.2013 13:48
quelle
0

kurze Antwort: onCreate() wird aufgerufen, wenn ein Activity erstellt wird. Das Verhalten für ein Gerät, das in den Ruhezustand wechselt und zurückkommt, wird als onPause() und onResume() ruf definiert. Gerät schlafen wird nicht die App oder die Aktivität zu töten - Zustand hält (fast) das gleiche.

    
A. Binzxxxxxx 30.01.2014 00:27
quelle