En primer lugar, mira mi publicación sobre Fragmentos retenidos. Podría ayudar.
Ahora para responder a sus preguntas:
¿El fragmento también conserva su estado de vista , o se volverá a crear en el cambio de configuración? ¿Qué es exactamente "retenido"?
Sí, el Fragment
estado de 's se retendrá durante el cambio de configuración. Específicamente, "retenido" significa que el fragmento no se destruirá en los cambios de configuración. Es decir, Fragment
se conservará incluso si el cambio de configuración hace Activity
que se destruya el subyacente .
¿Se destruirá el fragmento cuando el usuario abandone la actividad?
Al igual que Activity
s, Fragment
s puede ser destruido por el sistema cuando los recursos de memoria son bajos. El hecho de que sus fragmentos conserven su estado de instancia en los cambios de configuración no tendrá ningún efecto sobre si el sistema destruirá o no los Fragment
s una vez que abandone el Activity
. Si abandonas el Activity
(es decir, presionando el botón de inicio), el Fragment
s puede o no destruirse. Si sale Activity
presionando el botón Atrás (por lo tanto, llamando finish()
y destruyendo efectivamente Activity
), todos los Activity
mensajes adjuntos Fragment
también se destruirán.
¿Por qué no funciona con fragmentos en la pila posterior?
Probablemente hay varias razones por las que no es compatible, pero la razón más obvia para mí es que Activity
tiene una referencia a la FragmentManager
, y FragmentManager
gestiona la pila. Es decir, no importa si elige retener su correo electrónico Fragment
o no, el Activity
(y, por lo tanto, el FragmentManager
backstack) se destruirá en un cambio de configuración. Otra razón por la que podría no funcionar es porque las cosas pueden complicarse si se permite que existan fragmentos retenidos y no retenidos en la misma pila.
¿Cuáles son los casos de uso en los que tiene sentido usar este método?
Los fragmentos retenidos pueden ser bastante útiles para propagar información de estado, especialmente la gestión de subprocesos, a través de instancias de actividad. Por ejemplo, un fragmento puede servir como host para una instancia de Thread
o AsyncTask
, administrando su operación. Consulte mi publicación de blog sobre este tema para obtener más información.
En general, lo trataría de manera similar al uso onConfigurationChanged
con un Activity
... no lo use como una venda solo porque es demasiado vago para implementar / manejar un cambio de orientación correctamente. Úselo solo cuando lo necesite.