2012-05-16 12 views
7

Ok, he creado un Fragment con un poco de interfaz de usuario (par de cuadros de texto y otras cosas) y me utiliza setRetainInstance desde Im ejecutando un AsyncTask para consultar un servidor (solicitud sólo puede enviarse una vez) y necesito el resultado del AsyncTask. Entonces mi pregunta es: ¿Es incorrecto retener todo el fragmento con la UI? Vi par de ejemplos donde la gente utiliza un extra Fragment utilizar el setRetainInstance pero .. ¿hay algo malo no usar que una extra ?? Si hay un problema con el uso del setRetainInstance ¿por qué? No se pudo encontrar ninguna información en la documentación con respecto a esto.fragmento setRetainInstance con la interfaz de usuario de Android

Respuesta

-1

Si el bloqueo de la orientación a continuación, que debe estar bien. De lo contrario, puede terminar con fugas de memoria si retiene los widgets que están asociados con una instancia de actividad particular.

+0

pero enviaban los widgets de asociados con el fragmento? tal vez no entiendo cómo funcionan los Fragmentos. – Raykud

+1

Incluso si la orientación está bloqueada, esto podría ser problemático. Android vuelve a crear la vista para cualquier cambio de configuración. Mientras que un cambio de configuración podría ser una rotación de pantalla (el caso habitual), cambio de idioma, conexión/desconexión del teclado y otros. Cuidar la rotación de la pantalla no resuelve todo el problema. – sstn

2

Incluso si utiliza setRetainInstance(true), su Fragmento seguirá siendo recrear sus puntos de vista cuando se gira (que recibirá una llamada a onDestroyView y luego onCreateView). Siempre que no guarde referencias a vistas más allá del onDestroyView, no habrá filtraciones de la Actividad anterior. El mejor enfoque sería nulo de forma explícita las referencias en onDestroyView, pero su código en onCreateView sería en general sobrescribir esas referencias de todos modos.

Hay muchos ejemplos en línea (entre ellos algunos oficiales) donde la gente utiliza un fragmento separado (sin vistas) para conservar los datos. Suponiendo que lo que dije arriba es correcto, entonces esto es innecesario (por el bien de prevenir fugas). En muchos casos, puede terminar con un código/arquitectura más limpio si utiliza un fragmento separado cuya responsabilidad es solo manejar los datos y no preocuparse por la IU.

Puede comprobar para ver si se filtra la contextos de actividad después de girar por using Eclipse MAT.

Cuestiones relacionadas