Schauen Sie sich zunächst meinen Beitrag zu aufbewahrten Fragmenten an. Es könnte helfen.
Um Ihre Fragen zu beantworten:
Behält das Fragment auch seinen Ansichtsstatus bei oder wird dies bei Konfigurationsänderungen neu erstellt - was genau wird "beibehalten"?
Ja, der FragmentStatus wird während der Konfigurationsänderung beibehalten. Insbesondere bedeutet "beibehalten", dass das Fragment bei Konfigurationsänderungen nicht zerstört wird. Das heißt, das Fragmentwird auch dann beibehalten , wenn die Konfigurationsänderung dazu führt, dass der Basiswert Activityzerstört wird.
Wird das Fragment zerstört, wenn der Benutzer die Aktivität verlässt?
Genau wie Activitys kann Fragments vom System zerstört werden, wenn die Speicherressourcen niedrig sind. Ob Ihre Fragmente ihren Instanzstatus über Konfigurationsänderungen hinweg beibehalten, hat keinen Einfluss darauf, ob das System das Fragments zerstört, sobald Sie das verlassen Activity. Wenn Sie das verlassen Activity(dh durch Drücken der Home-Taste), kann das Fragments zerstört werden oder nicht. Wenn Sie das Activitydurch Drücken der Zurück-Taste verlassen (wodurch das aufgerufen finish()und effektiv zerstört wird Activity), werden auch alle Activityangehängten Fragments zerstört.
Warum funktioniert es nicht mit Fragmenten auf dem Backstack?
Es gibt wahrscheinlich mehrere Gründe, warum es nicht unterstützt wird, aber der offensichtlichste Grund für mich ist, dass das Activityeinen Verweis auf das enthält FragmentManagerund das FragmentManagerden Backstack verwaltet. Das heißt, unabhängig davon, ob Sie Ihr Fragments behalten oder nicht, wird der Activity(und damit der FragmentManagerBackstack) bei einer Konfigurationsänderung zerstört. Ein weiterer Grund, warum es möglicherweise nicht funktioniert, ist, dass es schwierig werden könnte, wenn sowohl beibehaltene als auch nicht beibehaltene Fragmente auf demselben Backstack existieren dürfen.
In welchen Anwendungsfällen ist diese Methode sinnvoll?
Behaltene Fragmente können sehr nützlich sein, um Statusinformationen - insbesondere die Thread-Verwaltung - über Aktivitätsinstanzen zu verbreiten. Beispielsweise kann ein Fragment als Host für eine Instanz von Threadoder zur AsyncTaskVerwaltung seines Betriebs dienen. Weitere Informationen finden Sie in meinem Blogbeitrag zu diesem Thema.
Im Allgemeinen würde ich es ähnlich behandeln wie onConfigurationChangedmit einemActivity ... Verwenden Sie es nicht als Pflaster, nur weil Sie zu faul sind, um eine Orientierungsänderung korrekt zu implementieren / zu behandeln. Verwenden Sie es nur, wenn Sie es brauchen.