Einfachste Android Activity Lifecycle
Bemerkte ich, dass die Android-Entwickler-Aktivität Abschnitt wurde aktualisiert, seit ich begann meine app, aber ich bin immer noch unklar, was die einfachste Aktivität-Lebenszyklus ist.
So weit wie ich kann machen aus:
onCreate, onResume und onPause sind die wesentlichen diejenigen.
Die Tätigkeit kann jederzeit gelöscht werden nach onPause, so dass ich speichern soll mein ganze app-Zustands in eine Datei onPause und sich nicht auf die onStop-oder onDestroy. Auch, onSaveInstanceState nicht aufgerufen wird, bevor jeder onPause so ist es nicht wirklich Wert, mit.
Anstatt zu versuchen, zu schreiben, lädt der code zur Verarbeitung aller Szenarien, warum nicht zerstören, die Aktivität, die am Ende Ihrer onPause?
Den Lebenszyklus würde dann bei onCreate und onResume, bevor es aktiv ist, dann onPause, wenn es inaktiv wird. Andere Methoden, die nicht benötigt werden würde.
Ich würde verwenden onCreate Aufruf setContentView und einrichten Ansicht-Hörer, aber alles andere würde versetzt werden, in onResume, einschließlich laden der wiederhergestellten Zustand aus einer Datei?
Wie bereits erwähnt, onPause sparen würde der Staat auf eine Datei und zerstören die Aktivität.
Soweit ich sehen kann, der einzige Nachteil dabei könnte sein, dass, wenn ein popup ist auf dem Bildschirm, die Aktivität wird gelöscht und muss neu erstellt werden, wenn das popup geschlossen ist, also die Aktivität nicht sichtbar, hinter dem popup (obwohl ich noch nicht getestet habe)
Kann es etwas länger dauern, neu zu starten, die Aktivität, aber da könnte das system gelöscht haben, wird die Aktivität sowieso ohne jede Nachricht, die Sie speichern müssen den ganzen Staat sowieso.
Irgendwelche Gedanken?
Update:
Ich nehme an, was ich dachte war, wo ein "front-page" Aktivitäten fordert, ein Spiel-Aktivität. Die frontpage-Aktivität nennen würde, die Spiel-Aktivität, wenn der Spieler klickt auf 'Spielen'
Spiel-Aktivität setzen würden, seine Ansichten und Hörer etc. in onCreate und onResume es würde laden Sie eine Datei mit dem Spielstand oder ein neues Spiel starten, wenn keine Datei existiert.
onPause des Spiels, schreibt der Spiel-Status der Datei, dann was auch immer passiert, um das Spiel-Aktivität (nichts, oder wird beendet/zerstört, oder was auch immer) der onResume-Methode laden Sie immer alle Daten wieder aus der Datei.
Das ist Art von, was ich dachte, wenn das macht keinen Sinn?
Update2:
Hab ich entwickelte eine einfache Lösung, die ich habe, dokumentiert in einer Antwort unten, wenn jemand interessiert ist!
Es unterstützt nicht die Android Activity Lifecycle 'Pausiert' und 'Abgebrochen' Staaten. Sobald es nicht mehr angezeigt, es tötet sich selbst und muss manuell neu gestartet werden, aber es trägt auf, von wo Sie aufgehört haben!
InformationsquelleAutor der Frage FrinkTheBrave | 2011-04-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie auf der Suche nach diesem?
Weiter deine Frage zu beantworten, ja, man kann deutlich sehen aus dem obigen Diagramm die "einfachste" (d.h. die kleinste Anzahl der Methodenaufrufe) lifecycle ist in der Tat
onCreate(); onStart(); onResume(); onPause();
.Sollten Sie auch wissen, über
onSaveInstanceState()
undonRetainNonConfigurationInstance()
. Diese sind NICHT lifecycle-Methoden.Alle diese Methoden sind sehr gut dokumentiert. Bitte Lesen Sie diese Dokumentation gründlich.
Zu klären, die Dinge weiter, sind hier ein paar real-life-Szenarien:
onPause
genannt wird. System läuft out of memory, ruftonSaveInstanceState
tötet Aktivität. Benutzer drückt wieder ein paar mal, die Aktivität muss neu instanziert werden (vorzugsweise unter Verwendung der gespeicherten Daten inonSaveInstanceState
).onPause->onDestroy
genannt werden, ohne daß dieonSaveInstanceState
.Sollten Sie verstehen, den wesentlichen Unterschied zwischen
onPause
undonSaveInstanceState
. Das erstere ist immer genannt, während die letztere wird nur aufgerufen, wenn die Aktivität Instanz könnte neu instanziert werden in der Zukunft. Nach diesem Gedankengang, Ihre Benutzer erwarten zwei Dinge:onSaveInstanceState
). Sie erwarten nicht, dass, wenn Sie Ausfahrt Ihre Aktivität. Allerdings:onPause
). Zum Beispiel, wenn Sie begann, eine Nachricht verfassen, werden Sie erwarten, es zu sehen als einen Entwurf für das nächste mal kommen Sie wieder, auch wenn Sie am Ende der Aktivität.Sollten Sie verstehen, wie diese Methoden sind soll verwendet werden, um zu bekommen, was die Benutzer erwarten. Wie Sie eigentlich verwenden ist bis zu Ihnen, Ihren Bedürfnissen, und Ihre app ist die Natur.
InformationsquelleAutor der Antwort Felix
Android-system ist die Handhabung des Lebenszyklus, d.h. die Aktivitäten instanziieren und aufrufen lifecycle-Methoden. Also ich weiß nicht was du meinst mit dem "zerstören der Aktivität". Sie, als Entwickler, haben keine solche Möglichkeit.
Zweite, activity lifecycle fließen kann, werden manchmal verwirrend (ich weiß, ich kämpfte mit ihm am Anfang). Also, einfach implementieren alle Lebenszyklus-Methoden und setzen logging-Anweisungen in Ihnen. Dann versuchen Sie, alle real-life use cases (einschließlich Empfang eines Anrufs während der app-Nutzung), um zu sehen, wie lifecycle-Methoden aufgerufen werden.
InformationsquelleAutor der Antwort Peter Knego
Ich war das Studium der Aktivität, die Lebensdauer und den gesamten Prozess der, was passiert, wenn Sie beginnen, jede Aktivität, angefangen von
onCreate
. Hier ist ein UML-Diagramm, um Ihnen zu helfen.Klicken Sie auf diesen link, um zu sehen, eine Hochauflösende version.
InformationsquelleAutor der Antwort nikoo28
Die Antwort ist so einfach wie das Leben-Zyklus. Nur überschreiben, Rückrufe, wenn Sie brauchen, um zu behandeln Zeug dort.
Android wird immer Aufruf jeder callback, wie es soll, außer in bestimmten Fällen.
Nur weil bestimmte Rückrufe sind nicht unbedingt genannt werden, bedeutet nicht, dass Sie nutzlos sind. Nur nicht versuchen, mit vernünftigen Sachen in solchen callback-Methoden.
InformationsquelleAutor der Antwort Octavian Damiean
Ich glaube, ich habe gefunden, was ich Suche! (Mich 1, Bono 0)
Dies ist für ein einzelnes "Spiel" - Aktivität, die verwendet minimale Methoden, um die Kontrolle über eine 'GameThread' thread behandelt das Spiel. Es verwendet einen zusätzlichen 'GameData' Klasse zum speichern von Daten, welche erforderlich ist, beharrlich zu sein zwischen Aktivierungen.
Wenn die app den Fokus verliert (z.B. ein eingehender Anruf, oder der Benutzer klickt wieder usw.), Spiel speichert die GameData in eine Datei und beendet sich. Um fortzufahren, starten Sie einfach die app wieder und es geht rechts zurück zu, wo Sie aufgehört haben.
Layout-Datei 'game.xml" ist eine SurfaceView bedeckt den ganzen Bildschirm
Game.java:
GameThread.java:
Scheint es zu funktionieren. Es bedeutet, dass die Handhabung der verschiedenen Bildschirme (z.B. Titel-Bildschirm, der Optionen, Wiedergabe und das Spiel ist vorbei) in dem einen thread, aber das ist nicht das Ende der Welt, IMHO.
Vielleicht werde ich veröffentlichen den code CodeReview (ich werde aktualisieren, wenn ich tun) und sehen, ob jemand hat keine Kommentare. Mittlerweile bin ich besser Programmieren des nächsten Angry Birds!
InformationsquelleAutor der Antwort FrinkTheBrave
onCreate() offensichtlich ersten. Ihre Aktivität kann dann eingeben, onPause(). Von dort könnte es entweder onResume() oder onDestroy(). Das ist der einfachste Weg durch den Lebenszyklus, die ich kenne.
Ich hatte eine Aktivität, die nicht über eine onPause () - Methode. Durch eine seltsame Serie von Ereignissen, bemerkte ich in DDMS, dass meine app nicht sichtbar, aber es war immer noch ersuchenden freshAds von AdMob 🙂 Schöne Akku-Sauger. Das ist inzwischen geklärt, aber mich daran erinnert, wie wichtig die einfachen Dinge sind.
InformationsquelleAutor der Antwort Bill Mote
Was ich persönlich denke ist Entwickler sollten, teilen Sie die Arbeit in verschiedenen Staaten der Aktivität. Reihenfolge der arbeiten muss beibehalten werden, in diesem Fall, was ist mehr wichtig ich denke, und das ist, warum, weil Android nicht umgehen kann, eine lange Verarbeitung der Benutzeroberfläche in einem einzigen thread & es gibt Fehler, die Android haben 'so viel Arbeit zu tun" in dieser Referenz werden könnte Ursache dafür, dass die Abstürzen, manchmal So sollten wir verhindern, dass zu schreiben, der ganze code in einer Sektion. Der code würde in Unterschied-Funktionen oder Klassen, und wir können Ableitungen dieser Funktionen, wie pro Anforderung. Danke.
InformationsquelleAutor der Antwort Suresh Sharma
Gibt es 7 Methoden zu verwalten, dass die Aktivität Lebenszyklus in Android-Anwendung:
Habe ich geschrieben, mehr in die Tiefe über diese Methoden auf mein blog
InformationsquelleAutor der Antwort techclinch
Den Reifen, voll ausgestattete und voll funktionsfähige Android-app bekommt der transition (state = Funktion der Zeit) nach der Antwort von @Felix.
Aber was, wenn Sie nur wollen, um eine app zu erstellen, die nicht einmal über GUI. Und Sie wollen, dass die einfachste lifecycle-dann habe ich die Antwort weiter unten.
Diese Antwort wahrscheinlich würden Sie interessant finden. Android-system nach der Lektüre AndroidManifest.xml weiß, das ist Einstieg. Welche Aktivität hat diese
wird das Start-oder Einstiegspunkt für das system, um mit zu beginnen. Nach dieser app Prozess bekam den Speicher, wo es beginnen kann, sich.
Ihren wichtigsten Prozess der Schöpfung ist die Aufgabe der Android-system. Wenn eine Anwendung eine Komponente gestartet wird und die Anwendung keine anderen Komponenten laufen, die Android-system beginnt eine neue Linux-Prozess. Nachdem der Prozess ruft die onCreate()schafft es Haupt-thread. Das ist der Grund, warum Sie anrufen müssen, onCreate()weil der Haupt-thread wird dann initialisiert und der main-thread ist der Auslöser für alle Ihre zukünftigen Aktionen.
Auf onCreate(), hast du dein Haupt-thread. Danach ist es völlig bis zu Ihnen, was Rückrufe, die Sie anrufen möchten. Es gibt keine Regel, die Sie anrufen müssen, onStart() nach der onCreate().
Nur ein lifecycle Methode onCreate() wird garantiert, um Ihre Komponente Lebenszyklus zurück.
Und, darüber hinaus, zu verstehen, was die einzelnen lifecycle-Methode ist zu tun im inneren, setzen Sie den folgenden code.
So, immer über den gleichen code zum anzeigen der Protokolle in der log-Katze-Konsole.
Wenn Ihr die app startet, GUI, ruft onStart(). Wenn Sie nicht aufrufen super () - Methode innerhalb der callback, android-system zeigt die broken pipe-Fehler und es kann nicht die weitere Verarbeitung und Debuggen.
Aber, die Sie implementieren können, die Ihre eigene Logik innerhalb der einzelnen callback-Methode. Eg, die Sie tun können, Summe der zwei zahlen auf onStart().
So, alle android-callback-Methoden sind teilweise implementierten Methoden. Sie sind nicht rein abstrakte Methoden, weil Sie super () - Methode in Ihnen.
Dem angehängten Bild sagt: Application-main-Prozess ruft onCreate(), Delegierte Sie die Verantwortung für Haupt-thread (UI-thread) und Haupt-thread ruft diese 16 weitere Rückrufe.
Weiter, wenn Sie möchten, um zu sehen, alle Ihre Methoden an der bestimmten Zeit, setzen Sie diesen code unten.
In meinem Szenario, aus dem nur oben ein code-snippet, ich sehe es genannt hat 375 Methoden.
Hinweis: Wenn Sie noch eine andere Methode in onCreate() drucken, bevor Sie alle Ihre Methoden mit nur obigen code-snippet, Sie würde haben gesehen, dass die Methode als gut. Es heißt, Ihr Zustand der Klasse (d.h., snapshot) ist entsprechend zu Ihnen, was Sie tun, von Zeit zu Zeit, Sie halten die Aktualisierung Ihrer Momentaufnahme.
InformationsquelleAutor der Antwort Uddhav Gautam