2010-12-08 5 views
6

, wenn Sie ein Android-App haben, die mehr als eine Aktivität hat, und Aktivität A beginnt B, also wenn Aktivität b stürzt der Prozess abgebrochen wird, sondern durch Android OS wiederbelebt und startet Aktivität A wieder, anstatt nur die App herunterzufahren, warum ?Warum "reaktiviert" Androide Abstürze von Apps?

+0

Wird es tatsächlich A wiederbeleben, oder einfach B töten? – blindstuff

+0

es startet den ganzen Prozess neu, aber startet mit onCreate und onStart nur A, wenn du einen wer hast, der B startet, der C startet und C eine ausbrechende Ausnahme hatte, dann würde Android den Anwendungsprozess starten und B in den Vordergrund setzen, wenn du drückst Mit der 'Zurück'-Taste bekommst du wieder A, obwohl es wieder A's onCreate aufruft. – codeScriber

+0

Yup, ich habe versucht, was Sie erwähnt haben, scheint, dass Sie Recht haben, obwohl manchmal ich es immer zu A zurückspringen hoffe. Hoffe jemand kennt die Antwort. – blindstuff

Antwort

4

Sie sich beschweren, dass Android wird versuchen App-Zustand anmutig nach einem Absturz zu erholen? ;) Die

ist das Ergebnis des Android Ressourcenmanagements und die Aktivität Lebenszyklus bei der Arbeit. Beachten Sie, dass eine einzelne Aufgabe aus einer Reihe von Aktivitäten bestehen kann, die sich über mehrere Prozesse oder Apps erstrecken können. Wie hier beschrieben: http://android-developers.blogspot.com/2010/04/multitasking-android-way.html Android-Prozesse lassen sich nicht "sauber" im traditionellen * nix-Prozess abschalten. Die Komponenten Ihrer App erhalten Lifecycle-Ereignisse, aber ab einem bestimmten Zeitpunkt kann die App ohne weitere Warnung beendet werden, sodass das System seine Ressourcen zurückgewinnen kann.

Zum Beispiel könnte ein Benutzer die Web-Surfen wird, klicken Sie auf einen YouTube-Link, um die YouTube-App startet, dann eine Share-Taste klicken, um ihr Lieblings-Social-Networking-App und buchen Sie den Video-Link zu starten. Dies ist alles Teil derselben Aufgabe; Wenn der Benutzer mehrere Male zurück drückt, kehren sie zu der Seite im Browser zurück, von der sie gestartet wurden.

Sobald Sie das Social-Networking-App starten, kann das System entscheiden, dass es zu wenig Speicher läuft und es wird an den Browser des Prozess tötet mehr freizugeben. (Immerhin liegt es nicht vorne und der Benutzer merkt es nicht.) Wenn der Benutzer die Zurück-Taste drückt, um zur Browser-Aktivität zurückzukehren, wird er neu gestartet und rekonstruiert den letzten Zustand, in dem der Benutzer ihn verlassen hat. Im schlimmsten Fall erlebt der Benutzer eine kurze Verzögerung, während sich die Dinge neu initialisieren.

Aber dieselbe Abfolge von Ereignissen eine frühere Aktivitätszustand wieder herstellt kann sogar innerhalb der gleichen App im gleichen Prozess geschehen. In Ihrem Szenario wurde Aktivität B als Ergebnis des Absturzes geschlossen. Das System macht also genau das, was es immer tut - es kehrt zur vorherigen Aktivität zurück: Aktivität A. Aber der Prozess von Aktivität A ist nicht immer da (er ist abgestürzt!), So dass das System ihn neu startet und seinen vorherigen Zustand rekonstruieren kann.

+0

es ist wahr, was Sie sagen, aber in der Logcat können Sie sehen, dass, obwohl die Anwendung Signal 3 (kill graciously) erhalten hat, es immer noch böse stirbt, was bedeutet, dass nicht von der OnDestroy und der OnTerminate der Anwendung aufgerufen wird. ich beschwere mich nicht, aber ich bin speziell für mich abgehört und ich dachte, es wäre schön, wenn es eine Möglichkeit wäre, es zu stoppen, da es so viele Aspekte von Aufgaben und Prozessen gibt, die geändert werden können. – codeScriber

Verwandte Themen