Je trouve le fragment # setRetainInstance (vrai) déroutant. Voici le Javadoc, extrait de Android Developer API :
public void setRetainInstance (booléen retenir)
Contrôlez si une instance de fragment est conservée lors de la recréation d'activité (par exemple à partir d'un changement de configuration). Cela ne peut être utilisé qu'avec des fragments qui ne sont pas dans la pile arrière. S'il est défini, le cycle de vie du fragment sera légèrement différent lorsqu'une activité est recréée:
- onDestroy () ne sera pas appelé (mais onDetach () le sera toujours, car le fragment est détaché de son activité actuelle).
- onCreate (Bundle) ne sera pas appelé car le fragment n'est pas en cours de recréation.
- onAttach (Activity) et onActivityCreated (Bundle) seront toujours appelés.
Question: Comment utilisez-vous cela en tant que développeur et pourquoi cela facilite-t-il les choses?
Comment utilisez-vous en tant que développeur
Appelez setRetainInstance(true)
. Je le fais généralement dans onCreateView()
ou onActivityCreated()
, où je l'utilise.
et pourquoi cela facilite-t-il les choses?
Il a tendance à être plus simple que onRetainNonConfigurationInstance()
pour gérer la conservation des données à travers les changements de configuration (par exemple, faire pivoter l'appareil de portrait en paysage). Les fragments non retenus sont détruits et recréés lors du changement de configuration; les fragments retenus ne le sont pas. Par conséquent, toutes les données détenues par ces fragments conservés sont disponibles pour l'activité post-modification de la configuration.
Il est très utile pour garder ouvertes les ressources de longue durée, telles que les sockets. Avoir un fragment sans interface utilisateur qui contient des références aux prises Bluetooth et vous n'aurez pas à vous soucier de les reconnecter lorsque l'utilisateur retourne le téléphone.
Il est également utile de conserver les références aux ressources qui prennent beaucoup de temps à charger, comme les bitmaps ou les données du serveur. Chargez-le une fois, conservez-le dans un fragment conservé, et lorsque l'activité est rechargée, elle est toujours là et vous n'avez pas besoin de la reconstruire.
Ajout de cette réponse très tard, mais je pensais que cela clarifierait les choses. Répétez après moi. Lorsque setRetainInstance est:
FALSE
VRAI
N'oubliez pas que ce qui précède s'applique aux DialogFragments ainsi qu'aux Fragments.