2012-03-21 16 views
16

Desde la depreciación de onRetainNonConfigurationInstance he estado aprovechando el marco cada vez más para los cambios de configuración. Como utilizo ViewPager para contener mis fragmentos principales, no puedo usar setRetainInstance, lo que limita mis cambios de configuración para usar en SaveInstanceState como lo haría una actividad o vista estándar.onSaveInstanceState limit?

Funciona a la perfección sin ningún problema, pero actualmente estoy transfiriendo un conjunto de datos Serializable bastante considerable que me hace querer obtener la opinión de las comunidades sobre si es o no una buena idea.

tl; dr: ¿onSaveInstanceState tiene una limitación de tamaño en lo que pasa a través de él?

+0

Creo que no es así. Probablemente use 'SharedPreferences' - Eso creo. –

+0

"Como uso ViewPager para contener mis Fragmentos principales, no puedo usar setRetainInstance" - ¿Por qué crees que no puedes usar 'setRetainInstance()' con fragmentos en 'ViewPager'? No puedo encontrar ningún lugar que cite esta limitación. ¿Tienes un enlace? ¡Gracias! – CommonsWare

+0

Simplemente no funciona, es probable que sea un error. He intentado con 'FragmentPagerAdapter' y' FragmentStatePagerAdapter' y ninguno de los Fragmentos funciona correctamente con 'setRetainInstance()'. Cuando los moví de 'ViewPager' a un conmutador estándar similar a (vea a continuación), todo funcionó correctamente. http://developer.android.com/resources/samples/Support13Demos/src/com/example/android/supportv13/app/ActionBarTabsPager.html – HandlerExploit

Respuesta

14

Sería útil decir algo más que "bastante considerable". :)

Estos datos pasan por un IPC, y el límite de IPC es de aproximadamente 1 MB. Desea mantener su tamaño ordenado significativamente más pequeño que eso; 100K es probablemente un buen máximo. Y realmente desea mantener esto tan pequeño como sea posible (piense en lo que pone allí y no pierda espacio), porque esta información tendrá que ser almacenada por el sistema en RAM, incluso cuando se mata su propio proceso.

0

El límite es el límite de memoria y, dado que no tiene errores de OutOfMemory, debería estar bien.

Simplemente asegúrese de no tener ninguna vista o contexto en el objeto que pasa porque esto puede hacer que el uso de la memoria crezca rápidamente si el usuario cambia de orientación constantemente.

+0

¿Cómo se guarda en la memoria si la aplicación se recicla? Esta información es persistente incluso entonces, así que sé que no se puede mantener ninguna memoria que dependería de la aplicación, por lo que, por supuesto, OutOfMemoryErrors no ocurriría en la propia aplicación. Y afirmé explícitamente que estaba pasando objetos Serializables, es imposible pasar una Vista o un Contexto a través de eso. Pero si pasara uno a través de la opción RetainNonConfigurationInstance, se filtraría toda la actividad, así que sí, eventualmente se quedaría sin memoria en los cambios de configuración en ese escenario. – HandlerExploit