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 Fragmentsera conservé même si le changement de configuration entraîne la Activitydestruction du sous-jacent .
Le fragment sera-t-il détruit lorsque l'utilisateur quittera l'activité?
Tout comme Activitys, Fragments 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 Fragments une fois que vous aurez quitté leActivity . Si vous quittez le Activity(c'est-à-dire en appuyant sur le bouton d'accueil), le Fragments peut être détruit ou non. Si vous quittez le Activityen appuyant sur le bouton de retour (donc, en appelant finish()et en détruisant efficacement le Activity), tous les Activitys 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 Activitycontient une référence au FragmentManager, et leFragmentManager gère le backstack. Autrement dit, peu importe si vous choisissez de conserver votre Fragments ou non, le Activity(et donc le FragmentManagerbackstack 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 onConfigurationChangedqu'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.