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 Fragment
Status wird während der Konfigurationsänderung beibehalten. Insbesondere bedeutet "beibehalten", dass das Fragment bei Konfigurationsänderungen nicht zerstört wird. Das heißt, das Fragment
wird auch dann beibehalten , wenn die Konfigurationsänderung dazu führt, dass der Basiswert Activity
zerstört wird.
Wird das Fragment zerstört, wenn der Benutzer die Aktivität verlässt?
Genau wie Activity
s kann Fragment
s 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 Fragment
s zerstört, sobald Sie das verlassen Activity
. Wenn Sie das verlassen Activity
(dh durch Drücken der Home-Taste), kann das Fragment
s zerstört werden oder nicht. Wenn Sie das Activity
durch Drücken der Zurück-Taste verlassen (wodurch das aufgerufen finish()
und effektiv zerstört wird Activity
), werden auch alle Activity
angehängten Fragment
s 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 Activity
einen Verweis auf das enthält FragmentManager
und das FragmentManager
den Backstack verwaltet. Das heißt, unabhängig davon, ob Sie Ihr Fragment
s behalten oder nicht, wird der Activity
(und damit der FragmentManager
Backstack) 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 Thread
oder zur AsyncTask
Verwaltung seines Betriebs dienen. Weitere Informationen finden Sie in meinem Blogbeitrag zu diesem Thema.
Im Allgemeinen würde ich es ähnlich behandeln wie onConfigurationChanged
mit 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.