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 Fragmentstato 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è, Fragmentverrà mantenuto anche se la modifica della configurazione provoca la Activitydistruzione del sottostante .
Il frammento verrà distrutto quando l'utente lascia l'attività?
Proprio come Activitys, Fragments 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 Fragmentuna volta che hai lasciato il file Activity. Se si lascia il Activity(cioè premendo il tasto home), la Fragments può o non può essere distrutta. Se si esce Activitypremendo il pulsante Indietro (quindi, chiamando finish()e distruggendo efficacemente il Activity), verranno distrutti anche tutti Activityi 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 Activitycontiene un riferimento a FragmentManagere FragmentManagergestisce lo backstack. Cioè, indipendentemente dal fatto che tu scelga di conservare i tuoi Fragmento meno, il Activity(e quindi il FragmentManagerbackstack) 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 , Threado AsyncTaskgestirne il funzionamento. Vedi il mio post sul blog su questo argomento per ulteriori informazioni.
In generale, lo tratterei allo stesso modo dell'uso onConfigurationChangedcon un Activity... non usarlo come un cerotto solo perché sei troppo pigro per implementare / gestire correttamente un cambio di orientamento. Usalo solo quando è necessario.