2012-03-29 4 views
14

Ich habe mehrere Beiträge gelesen, die den Unterschied zwischen onStart() und onResume() beschreiben: onStart() wird aufgerufen, wenn die Aktivität sichtbar wird, onResume() wird aufgerufen, wenn die Aktivität für die Interaktion vom Benutzer bereit ist. fein.Android: Wann OnStart(), OnStop() verwenden?

Ich habe immer nur Code onPause() und onResume() hinzugefügt, und nie mit onStart() und onStop() gestört.

Kann jemand einige konkrete Beispiele dafür geben, was Sie in onStart(), vs. onResume() tun können? Das gleiche gilt für onStop() und onPause(), wie ist onStop() nützlich? Ich muss hier etwas Grundlegendes vermissen.

Antwort

9

onStop() wird (zum Beispiel) aufgerufen werden, wenn Sie die Aktivität für eine andere Tätigkeit (bearbeiten lassen. Fast sehen commonswares Kommentar über dialogorientierte Aktivitäten). Wenn Sie beispielsweise in Aktivität A startActivity() verwenden, um Aktivität B zu starten. Wenn Sie in Aktivität B zurück drücken, kehren Sie zu Aktivität A zurück und onStart wird aufgerufen.

Dieses von einigen der Gründe unterscheidet könnte ohne onStop dazu aufgerufen, aufgerufen werden. Wenn zum Beispiel der Bildschirm abläuft oder Sie die Standy-Taste drücken, wird zwar angerufen, aber wahrscheinlich nicht onStop (je nach verfügbarem Speicher und was nicht), so ist es eine "hellere Pause". OnStop wird wohl auch in diesem Fall schließlich aber nicht sofort aufgerufen werden.

Ok, aber was ist der Einsatz

Oft gibt es keine spezifische Anwendung ist, aber es könnte sein. Da Ihre Aktivitäten ihren Speicherstatus auch nach dem Start einer anderen Aktivität auf dem Stapel behalten, erhöht sich dieser Stapel mit der Anzahl der gestarteten Aktivitäten (Höhe des Stapels). Dies kann in einigen Anwendungen zu einer hohen Speichernutzung führen. Nach einer Weile wird das Framework eingreifen und einige Aktivitäten auf dem Stack beenden, aber das ist ziemlich unverblümt und wird wahrscheinlich eine Menge von Zuständen bedeuten, die bei der Rückkehr beibehalten werden.

So ein Beispiel für onStart/onStop ist, wenn Sie einige Zustand freigeben möchten, wenn Sie eine Aktivität für eine andere verlassen und neu erstellen, wenn Sie zurückkommen. Ich habe es benutzt, um listadapters auf Null, leere Bild-Caches und ähnliches (in sehr spezifischen Anwendungen) zu setzen. Wenn Sie den von sichtbaren Ansichten verwendeten Speicher in einem Listenadapter freigeben möchten, können Sie ihn in onstart neu erstellen und die Ansichten von der GC aufnehmen lassen. Dies wird die Wahrscheinlichkeit erhöhen, dass der Rest des Speicherzustands der Aktivität weiterlebt.

Einige Ressourcen können als gut genug zum Speichern betrachtet werden, während die Aktivitätsinstanz aktiv ist, und einige nur dann, wenn sie sich auf der Vorderseite des Stapels befinden. Es liegt an Ihnen zu entscheiden, was am besten in Ihrer Anwendung ist und die Granularität von create/start/resume gibt Ihnen das.

+2

"onStop() wird aufgerufen, wenn Sie die Aktivität für eine andere Aktivität verlassen" - tatsächlich wird sie aufgerufen, wenn Ihre Aktivität nicht mehr sichtbar ist. Wenn eine dialogbezogene Aktivität in den Vordergrund tritt, wird 'onStop()' nicht aufgerufen. – CommonsWare

+0

Guter Punkt. Die aufrufende Aktivität könnte in diesem Beispiel immer noch im Hintergrund sichtbar sein (und Recycling-Material wäre dann schlecht). Ich zeigte ein Beispiel, wo es passiert und wie ich das verwendet habe, um den Speicherverbrauch zu reduzieren, aber das ist eine gute Ausnahme. In der Regel ist es immer noch gut. Ich habe noch keine Stapel von Dialogaktivitäten gesehen, die sich gegenseitig anrufen. –

+0

Oh, ohne Zweifel, Dialog-Themen-Aktivitäten sind ungewöhnlich. – CommonsWare

0

Ich denke, dass Ihre Frage recht hier auf dem doc erklärt: Lesen Sie über die Activity Life Cycle

+0

'onStart()' funktioniert nachdem 'onCreate()' seine Aufgabe beendet hat. 'onResume()' funktioniert, wenn Sie durch Drücken der Zurück-Taste zu Ihrer 'Absicht' oder 'Aktivität' zurückkehren. –

+1

@ Hamza, das ist nicht wahr. Wenn Ihre Aktivität von "nicht sichtbar" zu "sichtbar" wechselt, wird onStart() aufgerufen. –

+0

Kein Mann! Ich habe onStart() auf meiner Anwendung ausgeführt. Es war, weil ich nach dem Laden der Aktivität Daten vom Webservice abrufen wollte. Überprüfen Sie dies mit Android Guide [link] (http://developer.android.com/reference/android/app/Activity.html) –

1

onStart() funktioniert, nachdem onCreate() seine Aufgabe beendet hat. Es ist ein guter Ort, um einen BroadcastReceiver zu setzen oder einen Zustand über die Benutzeroberfläche zu initialisieren, der immer dann angezeigt werden sollte, wenn der Benutzer zu dieser Aktivität zurückkehrt.

onResume() funktioniert, wenn Sie durch Drücken der Zurück-Taste zu Ihrer Absicht oder Aktivität zurückkehren.So wird onPause immer dann aufgerufen, wenn eine andere Aktivität in den Vordergrund tritt.