Par für den Kurs, ich sehe! Ich sehe wertvolle Informationen, vermischt mit teuren Fehlinformationen. Nein, die Online-Dokumente spezifizieren NICHT alle genau, unter welchen Umständen der Prozess beendet wird. Dies ist beabsichtigt, da es ohne vorherige Ankündigung geändert werden kann. Sicher, der häufigste Grund für den Aufruf von onDestroy() ist, dass das System nicht mehr genügend Arbeitsspeicher hat, was bei neueren Telefonen weniger üblich ist (da sie so viel Speicher haben). Aber es gibt keine Garantie dafür, dass dies der einzige Grund dafür ist, dass es aufgerufen wird.
Aber der "Vertrag" zwischen Android und den Entwicklern ist, dass, wenn Sie die Regeln befolgen, die erforderlichen Lifecycle-Callbacks implementieren, wenn sie benötigt werden, dann wird es funktionieren, und Sie müssen nicht genau wissen, unter welchen Umständen onStop(), onSaveInstanceState() und onDestroy() werden aufgerufen.
Jetzt im Gegensatz zu Google, werde ich zugeben, dass der Wortlaut des Vertrags ist in einigen Punkten vage. Dies liegt daran, dass sie unter anderen, weniger wichtigen Gründen Begriffe verwenden, die eine branchenübliche Bedeutung haben, wie "Vordergrund", aber sie verwenden sie in leicht veränderten Sinnen. Und die Veränderung wird entweder nie erklärt oder nur an dunklen Orten erklärt. Es hilft auch nicht, dass das Diagramm "die Pfade zeigt, die eine Aktivität zwischen Zuständen einnehmen kann", aber nicht zeigt, dass onDestroy() oft aufgerufen werden kann, auch wenn der Übergang von "Angenommen" zu "Angehalten" umgangen wird. Der Text beschreibt diese Möglichkeit jedoch eindeutig.
Aus diesem Grund ist das Lesen des Application Lifecycle-Abschnitts von "Application Fundamentals" leider nicht genug. Stattdessen muss man auch das Javadoc für jeden der Callbacks unter dem für Activity lesen, sowie den Abschnitt "Application Fundamentals" zu Processes.
Danach ist es enorm hilfreich, Log.d-Anweisungen in jedem der Callbacks zu platzieren und die Logcat-Ausgabe zu beobachten, während Sie Ihre Anwendung durch den Lebenszyklus durchlaufen. Aber selbst dann sollten Sie sich nicht darauf verlassen, dass Lebenszyklus-Ereignisse in der Reihenfolge auftreten, die Sie in logcat sehen, es sei denn, Sie finden eine Begründung dafür in einer der oben genannten Online-Dokumente.
Es gibt eine detaillierte Beschreibung des Aktivitätslebenszyklus im Abschnitt "Anwendungsgrundlagen" auf [developer.android.com] (http://developer.android.com/guide/topics/fundamentals.html#actlife) sollte die meisten Ihrer Fragen beantworten. –
Nein, es beantwortet nicht die obigen Fragen. Wenn Sie daran zweifeln, sehen Sie bitte nach. – cody
@cody: Wenn du dir wirklich etwas Zeit nimmst und * durch * die von Josef verlinkte Dokumentation liest, solltest du das notwendige Verständnis dafür bekommen, wie der Android Application Lifecycle funktioniert, was wiederum deine Frage beantworten sollte. Wenn es noch einige Dinge gibt, die unklar sind, schlage ich vor, eine * spezifische * Frage dazu zu stellen. – Nailuj