Tout d'abord, consultez mon article sur les fragments conservés. Ça pourrait aider.
Maintenant pour répondre à vos questions:
Le fragment conserve-t-il également son état d' affichage , ou sera-t-il recréé lors d'un changement de configuration - qu'est-ce qui est "conservé" exactement?
Oui, l' Fragment
état de sera conservé tout au long du changement de configuration. Plus précisément, «conservé» signifie que le fragment ne sera pas détruit lors des changements de configuration. Autrement dit, le Fragment
sera conservé même si le changement de configuration entraîne la Activity
destruction du sous-jacent .
Le fragment sera-t-il détruit lorsque l'utilisateur quittera l'activité?
Tout comme Activity
s, Fragment
s peut être détruit par le système lorsque les ressources mémoire sont faibles. Le fait que vos fragments conservent leur état d'instance malgré les modifications de configuration n'aura aucun effet sur le fait que le système détruira ou non les Fragment
s une fois que vous aurez quitté leActivity
. Si vous quittez le Activity
(c'est-à-dire en appuyant sur le bouton d'accueil), le Fragment
s peut être détruit ou non. Si vous quittez le Activity
en appuyant sur le bouton de retour (donc, en appelant finish()
et en détruisant efficacement le Activity
), tous les Activity
s attachésFragment
seront également détruits.
Pourquoi ne fonctionne-t-il pas avec des fragments sur la pile arrière?
Il y a probablement plusieurs raisons pour lesquelles ce n'est pas pris en charge, mais la raison la plus évidente pour moi est que le Activity
contient une référence au FragmentManager
, et leFragmentManager
gère le backstack. Autrement dit, peu importe si vous choisissez de conserver votre Fragment
s ou non, le Activity
(et donc le FragmentManager
backstack du) sera détruit lors d'un changement de configuration. Une autre raison pour laquelle cela pourrait ne pas fonctionner est que les choses pourraient devenir délicates si les fragments conservés et les fragments non conservés pouvaient exister sur le même backstack.
Quels sont les cas d'utilisation où il est logique d'utiliser cette méthode?
Les fragments conservés peuvent être très utiles pour propager des informations d'état - en particulier la gestion des threads - entre les instances d'activité. Par exemple, un fragment peut servir d'hôte pour une instance deThread
ou AsyncTask
, gérer son fonctionnement. Voir mon article de blog sur ce sujet pour plus d'informations.
En général, je le traiterais de la même manière onConfigurationChanged
qu'avec un Activity
... ne l'utilisez pas comme un bandaid juste parce que vous êtes trop paresseux pour implémenter / gérer correctement un changement d'orientation. Utilisez-le uniquement lorsque vous en avez besoin.