support perform oncreateview onattach onactivitycreated not example after android android-fragments android-fragmentactivity kill-process ondestroy

android - perform - Los fragmentos permanecen después de que la actividad sea asesinada y recreada.



onattach fragment android (4)

Tengo un FragmentActivity (Support Fragments) donde creo fragmentos por código y los coloco en FrameLayouts. Todo funciona bien hasta ahora. Ahora, si dejo la aplicación y devuelvo, todo está bien siempre que el sistema no elimine mi actividad (o lo hago con el botón de parada en DDMS). Si eso sucede, no se llama nada y se mata mi actividad. onDestroy no se llama.

Entonces, cuando vuelvo a abrir mi aplicación, todos los fragmentos aún existen y recibo NullPointerExeptions porque intentan hacer su trabajo. No se supone que los Fragmentos existan en este estado de la Aplicación, así que ese es un problema para mí.

No los necesito en el backStack, así que no los pongo allí y no puedo llamar a popBackStack () para deshacerme de ellos.

¿Cómo puedo restablecer mi FragmentManager en onCreate () o simplemente asegurarme de que los Fragmentos también se destruyan?


El lifecycle de lifecycle del fragmento es similar al lifecycle de lifecycle de la actividad, por lo que puede ser eliminado y recreado por el sistema para ahorrar memoria para otras aplicaciones. Esto significa que hay un mecanismo para guardar y restaurar el estado del fragmento. Deberías usarlo.

Si es imposible guardar el estado del fragmento (debido a que sus datos son dinámicos y no serializables), intente implementar algún comportamiento predeterminado para el estado no inicializado.


Esto en realidad podría ser normal. En lugar de crear instancias y destruir muchos fragmentos, Android puede mantenerlos cerca. Esto sucede especialmente con los ViewPagers.

¿Está utilizando una gran cantidad de llamadas getActivity () o llamadas para obtener el contexto? Si es así, verifique la llamada a getActivity () haciendo algo tan simple como

Activity activity = getActivity(); if ( activity == null ) { Log.w("activity null!", "This will cause a crash if you access this variable!"); }

Otro consejo sería tener cuidado con AsyncTasks. Si tiene alguno de estos ejecutándose en segundo plano, querría hacer un seguimiento si la Actividad está viva o muerta. Creo que hay controles de ciclo de vida en versiones posteriores de Android, pero también puedes mantener una bandera booleana en OnAttach () y onDetach ().


No estoy seguro de si es el mismo problema, pero hace un tiempo tuve un problema con los fragmentos en un viewpager donde nunca se llamaban los métodos del ciclo de vida del fragmento y el problema era con el administrador de fragmentos.

Por lo tanto, intente usar childFragmentManager en lugar de supportFragmentManager y vea si soluciona su problema.


Sé que es muy tarde pero tengo el mismo problema y encontré las respuestas aquí

soporte FragmentPagerAdapter mantiene referencia a fragmentos antiguos

y aquí

ViewPager y fragmentos: ¿cuál es la forma correcta de almacenar el estado del fragmento?

Supongo que el problema es que cuando creas actividad creas y guardas fragmentos en alguna lista y no en el administrador de fragmentos. Cuando la actividad se crea de nuevo, también crea un fragmento, pero el administrador de fragmentos usa el fragmento que se creó anteriormente. Así es como su fragmento devuelve nulo para getActivity () porque este fragmento es el que se creó antes de poner la aplicación en segundo plano.