studio programacion para móviles libro español edición desarrollo curso aplicaciones android illegalstateexception

android - programacion - IllegalStateException-biblioteca de soporte de fragmentos



manual programacion android español pdf (3)

Tengo un problema serio con mi aplicación que falla continuamente en algunos dispositivos de usuarios con la siguiente excepción en un método Activity onStart:

Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1299) at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1310) at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:541) at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:525) at android.support.v4.app.DialogFragment.show(DialogFragment.java:123)

No puedo reproducir este error localmente en mi emulador. He encontrado algunas preguntas con respecto a este problema en stackoverflow: here y here

He intentado la solución sugerida, es decir, no permitir paquetes vacíos en onSaveInstance ni en fragmentos ni en actividades.

Sin embargo el problema persiste. Este es el único informe de Crash que recibo, y lo recibo continuamente.

¿Alguien tiene una solución de trabajo?


He resuelto este problema por

Verifique mi respuesta aquí para ver el código: "No se puede realizar esta acción después de onSaveInstanceState". ¿Por qué obtengo esta excepción del método onResume de mi actividad?

No tengo más IllegalStateException hasta ahora.



Lee este artículo.

Y,

Éste.

Una vez que se comprende el problema, siga adelante y cambie las cosas correctamente:

Averigüe por qué sus transacciones están sucediendo fuera de su estado onResume. ¿Por qué están sucediendo estas cosas cuando no deberían ser? ¿Por qué agrega y elimina fragmentos manualmente con respecto al ciclo de vida de su aplicación en lugar de cuando el usuario lo solicita? Tal vez debería necesitar una vez en onCreate () o cuando el usuario invoca algo. Pero, ¿por qué te metes con ellos en onResume () en primer lugar? No hagas eso

Si cambia todos los .commit() a .commitAllowStateLoss() , los bloqueos desaparecerán. Pero, es mejor que no hagas eso. Es mejor que se asegure de no cambiar nunca sus fragmentos, excepto cuando la aplicación esté completamente activa. A veces, eso significa que nunca debes cargar un fragmento de OnActivityResult () sino más bien marcarlo para que se ejecute en tu onPostResume () y evitar realizar cambios en la interfaz de usuario en subprocesos asíncronos que asumen de forma errónea que no podrías haber eliminado la actividad mientras tanto.

Si solo quieres deshacerte de todo, .commitAllowStateLoss() lo hará. Si quieres hacerlo bien, asegúrate de no jugar con tus fragmentos después de que las cosas mueran.

Creo que una de las formas más recientes de Android circa Oreo cambió esto para evitar este molesto error. Mi respuesta parece un poco vaga pero es porque el error está en el paradigma. Usted puede golpear eso completamente con varios elementos de código y de manera bastante rutinaria.