2016-02-19 5 views
5

Ich versuche, die offizielle Dokumentation über die AndroidApplication Klassenlebenszyklus zu finden. Anscheinend kann die Klasse Application für StackOverflow here und here gefunden werden, wenn das System Speicher benötigt. Sogar this Tutorial sagt so.Android-Anwendung Klasse lifecyle Dokumentation

Aber nur wenige Dinge irritiert mich ein wenig über diese:

  • ich keine offizielle Dokumentation kann mir sagen, dass ja, die Application Klasse kann auf geringen Speicher getötet werden.
  • Ich kann kein offizielles Diagramm finden, das den Application Lebenszyklus weder darstellt.
  • Ich kann keinen geeigneten Rückruf finden, wenn die Application Klasse außer onLowMemory() getötet wird. Bedeutet das, dass ich diese Methode verwenden muss, um meine Daten zu erhalten?
  • Wenn die Klasse Application bei geringem Arbeitsspeicherdruck beendet wird und die App wieder in den Vordergrund tritt, wie kann ich in ihrer onCreate() wissen, dass die App nach einem Systemkill neu erstellt wurde? In einer Activity würde ich die savedInstanceState testen, aber soweit ich weiß gibt es nichts Ähnliches in der Application Klasse.

Vielen Dank für Ihre Erleuchtungen.

+0

Was ist mit 'onTrimMemory'? – pskink

+0

Haben Sie http://stackoverflow.com/questions/8515936/android-activity-life-cycle-what-are-all-these-methods-for gesehen? –

+0

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle –

Antwort

4

Ich kann keine offizielle Dokumentation finden, die mir sagt, dass ja die Application-Klasse bei wenig Speicher gelöscht werden kann.

Im Folgenden sind die Verweise auf, wo es gesagt wurde:

ich keine offizielle Diagramm nicht die Anwendung finden können darstellen Lebenszyklus weder.

Dies ist eine vernünftige Beobachtung ... Obwohl die folgende ist Meinung basiert, meine beste Vermutung ist, dass ein solches Diagramm, das die Android Multitasking „Philosophie“ widersprechen würde, die in der letzten Referenz beschrieben:

"Ein Schlüssel dafür, wie Android Anwendungen auf diese Weise behandelt, besteht darin, dass Prozesse nicht sauber heruntergefahren werden. Wenn der Benutzer eine Anwendung verlässt, wird sein Prozess im Hintergrund gehalten, sodass er weiterarbeiten kann (z. B. Herunterladen von Webseiten). Wenn ein Gerät nie zu wenig Speicherplatz hat, dann behält Android all diese Prozesse bei und hinterlässt wirklich alle Anwendungen "ru "die ganze Zeit".

Ich kann keinen richtigen Rückruf finden zu verwenden, wenn die Application-Klasse getötet wird ausgeschlossen onLowMemory(). Bedeutet das, dass ich diese Methode verwenden muss, um meine Daten zu erhalten?

In Bezug auf onLowMemory() deren Beschreibung ist recht einfach, sprechen wir über einen Hintergrundprozess oder Vordergrund UI? ...

Wenn keine Anwendung Activities im Vordergrund ist und O von Speicher niedrig ist, kann es töten die App, so dass keiner der Application oder die App-Komponenten (Activity, Service) Callbacks aufgerufen werden. Das heißt, (da Sie sich mit Activities befassen) empfehle ich, alle persistenten Daten gemäß der Dokumentation in onPause() zu speichern.

Wenn die Anwendungsklasse auf geringen Speicherdruck getötet wird und die App kommt wieder in den Vordergrund, wie kann ich wissen, in seiner onCreate(), dass die App nach einem System töten neu erstellt worden ist?

Sie können es nicht in Application 's onCreate() erkennen.

+0

Wenn eine App nach dem Herunterfahren des Prozesses in den Vordergrund tritt, wird die 'onCreate' Methode der Anwendungsklasse vor der' onCreate' Methode der Launcher/Hauptaktivität aufgerufen? –

+1

@the beest Natürlich wird zuerst eine 'Application'-Instanz instanziiert, dann werden die anderen App-Komponenten (' Activities', 'Services') erstellt. – Onik

1

Soweit ich weiß, können Sie das Anwendungstereignis nicht verarbeiten. Hier ist ein Zitat aus der onTerminate-Methode der Anwendung:

Diese Methode ist für den Einsatz in emulierten Prozessumgebungen. Es wird niemals auf einem Android-Produktionsgerät aufgerufen werden, wo Prozesse durch einfaches Töten entfernt werden; kein Benutzercode (einschließlich dieses Callbacks) wird dabei ausgeführt.

Die allgemeine Idee ist, dass es Ihnen egal sein sollte, ob die Anwendung getötet wurde oder nicht. Wenn dies der Fall ist, startet das Betriebssystem die App das nächste Mal, wenn es benötigt wird, andernfalls wird es fortgesetzt (und Sie verwenden dazu die Activity/Fragment-Lebenszyklusereignisse, um dies zu erreichen).

Welche Daten müssen Sie speichern - ist es möglich, sie früher zu speichern (wenn sie vom Web-Service empfangen werden usw.) anstatt auf den letzten Moment zu warten?

+0

Ich benutze, um meine Singletons zu speichern, die ihre Referenz über alle meine Aktivitäten behalten müssen. Einige von ihnen sind nicht "Parcelable" und können nicht in sie konvertiert werden.Ich weiß, dass ich mich nicht auf 'onTerminated' verlassen kann, aber was irritiert ist der Mangel an offizieller Dokumentation über den 'Application'-Lebenszyklus –

+0

Wenn Ihre Anwendung getötet wird, werden alle Singletons ebenfalls gced. Können Sie sie nicht beim nächsten Mal neu erstellen? Als Alternative können Sie Dagger (http://google.github.io/dagger/) ausprobieren und die Singletons dort injizieren, wo Sie sie benötigen (Sie können sie als Singletons markieren, damit Dagger sicherstellt, dass eine einzelne Instanz verwendet wird). . –

+0

Ja ich weiß, dass sie gced werden, was ich wissen will ist, warum es so ist (aus offiziellen Quellen). Und nein, ich bin nicht in der Lage, sie zu bekommen, nachdem ich gecodiert worden bin. Die Verwendung von Dolch ist für mich noch keine Lösung, da es nur darum geht, das Problem zu umgehen. Außerdem werde ich mit dem neuen Jack Compiler und Dagger etwas harte Zeiten haben. –