Prima di tutto, controlla il mio post sui frammenti conservati. Potrebbe aiutare
Ora per rispondere alle tue domande:
Il frammento mantiene anche il suo stato di visualizzazione o verrà ricreato in caso di modifica della configurazione: che cosa viene esattamente "conservato"?
Sì, lo Fragment
stato verrà mantenuto per tutta la modifica della configurazione. In particolare, "mantenuto" significa che il frammento non verrà distrutto in caso di modifiche alla configurazione. Cioè, Fragment
verrà mantenuto anche se la modifica della configurazione provoca la Activity
distruzione del sottostante .
Il frammento verrà distrutto quando l'utente lascia l'attività?
Proprio come Activity
s, Fragment
s può essere distrutto dal sistema quando le risorse di memoria sono insufficienti. Il fatto che i tuoi frammenti mantengano il loro stato di istanza attraverso le modifiche alla configurazione non avrà alcun effetto sul fatto che il sistema distruggerà o meno i messaggi di posta elettronica Fragment
una volta che hai lasciato il file Activity
. Se si lascia il Activity
(cioè premendo il tasto home), la Fragment
s può o non può essere distrutta. Se si esce Activity
premendo il pulsante Indietro (quindi, chiamando finish()
e distruggendo efficacemente il Activity
), verranno distrutti anche tutti Activity
i messaggi collegati Fragment
.
Perché non funziona con i frammenti nello stack posteriore?
Probabilmente ci sono molte ragioni per cui non è supportato, ma la ragione più ovvia per me è che Activity
contiene un riferimento a FragmentManager
e FragmentManager
gestisce lo backstack. Cioè, indipendentemente dal fatto che tu scelga di conservare i tuoi Fragment
o meno, il Activity
(e quindi il FragmentManager
backstack) verrà distrutto a seguito di una modifica della configurazione. Un altro motivo per cui non potrebbe funzionare è perché le cose potrebbero diventare difficili se entrambi conservati frammenti e frammenti non trattenuto è stato permesso di esistere sulla stessa backstack.
Quali sono i casi d'uso in cui ha senso utilizzare questo metodo?
I frammenti conservati possono essere molto utili per la propagazione delle informazioni sullo stato, in particolare la gestione dei thread, tra istanze di attività. Ad esempio, un frammento può fungere da host per un'istanza di , Thread
o AsyncTask
gestirne il funzionamento. Vedi il mio post sul blog su questo argomento per ulteriori informazioni.
In generale, lo tratterei allo stesso modo dell'uso onConfigurationChanged
con un Activity
... non usarlo come un cerotto solo perché sei troppo pigro per implementare / gestire correttamente un cambio di orientamento. Usalo solo quando è necessario.