Zuallererst sollten Sie sich meine Stelle über erhaltene Fragmente. Das könnte helfen.
Um nun Ihre Fragen zu beantworten:
Behält das Fragment auch seine siehe Status, oder wird dieser bei einer Konfigurationsänderung neu erstellt - was genau wird "beibehalten"?
Ja, die Fragment
Der Status von "S" wird bei der Konfigurationsänderung beibehalten. Konkret bedeutet "beibehalten", dass das Fragment no bei Konfigurationsänderungen zerstört werden. Das heißt, die Fragment
wird beibehalten selbst wenn die Konfigurationsänderung die zugrunde liegende Activity
zerstört werden.
Wird das Fragment zerstört, wenn der Benutzer die Aktivität verlässt?
Genau wie Activity
s, Fragment
s können vom System zerstört werden, wenn die Speicherressourcen knapp sind. Ob Sie Ihre Fragmente ihren Instanzstatus über Konfigurationsänderungen hinweg beibehalten lassen, hat keinen Einfluss darauf, ob das System die Fragmente zerstört oder nicht. Fragment
s, sobald Sie die Activity
. Wenn Sie die Activity
(z. B. durch Drücken der Home-Taste), wird die Fragment
s zerstört werden können oder nicht. Wenn Sie die Activity
indem Sie die Zurück-Taste drücken (und damit die finish()
und die effektive Zerstörung der Activity
), alle der Activity
s beigefügt Fragment
s werden ebenfalls zerstört.
Warum funktioniert es nicht mit Fragmenten auf dem hinteren Stapel?
Es gibt wahrscheinlich mehrere Gründe, warum es nicht unterstützt wird, aber der offensichtlichste Grund ist, dass die Activity
enthält einen Verweis auf den FragmentManager
und die FragmentManager
verwaltet den Backstack. Das heißt, unabhängig davon, ob Sie sich dafür entscheiden, Ihre Fragment
s oder nicht, die Activity
(und damit die FragmentManager
's backstack) wird bei einer Konfigurationsänderung zerstört. Ein weiterer Grund, warum es nicht funktionieren könnte, ist, dass die Dinge kompliziert werden könnten, wenn beide erhaltenen Fragmente y nicht zurückgehaltene Fragmente durften auf demselben Backstack existieren.
In welchen Anwendungsfällen ist es sinnvoll, diese Methode einzusetzen?
Zurückgehaltene Fragmente können für die Weitergabe von Zustandsinformationen - insbesondere für das Thread-Management - über Aktivitätsinstanzen hinweg sehr nützlich sein. Zum Beispiel kann ein Fragment als Host für eine Instanz von Thread
ou AsyncTask
und verwaltet seinen Betrieb. Siehe mein Blogbeitrag zu diesem Thema für weitere Informationen.
Im Allgemeinen würde ich es ähnlich behandeln wie die Verwendung von onConfigurationChanged
mit einer Activity
... verwenden Sie es nicht als Hilfsmittel, nur weil Sie zu faul sind, eine Orientierungsänderung richtig umzusetzen/zu handhaben. Verwenden Sie es nur, wenn Sie es brauchen.