2012-08-10 18 views
17

que tiene un serio problema con mi aplicación continuamente chocando en algunos dispositivos de los usuarios con la siguiente excepción en una actividad onStart método:IllegalStateException - biblioteca de soporte Fragmento

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 tema en stackoverflow: here y here

He intentado la solución sugerida, es decir, no permita que los paquetes vacíos en onSaveInstance ni en fragmentos ni 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?

Respuesta

7

que han resuelto este problema mediante

comprobar mi respuesta aquí para el código: "Can not perform this action after onSaveInstanceState" - why am I getting this exception from my activity's onResume method?

conseguido no más de IllegalStateException hasta ahora.

4

que resolvieron este usando this workaround, es decir, poner el código en un métodos onPostResume() función en la actividad

+0

¿Funciona? ¿Algún problema? –

+0

por votación: onPostResume no está disponible para android.support.v4.app.Fragment – Loda

+1

@Loda está en android.support.v4.app.FragmentActivity, no el fragmento – CACuzcatlan

-1

Read This Article.

Y,

This one.

vez que se entiende el problema, vaya por delante y cambiar las cosas correctamente:

Higo Asegúrese de 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é está agregando y eliminando fragmentos manualmente con respecto al ciclo de vida de su aplicación en lugar de cuando el usuario lo solicita? Debería necesitar una vez en onCreate() o cuando el usuario invoca algo. ¿Pero por qué te estás metiendo con ellos en on Reesume() en primer lugar? No hagas eso.

Si cambia todo el .commit()-.commitAllowStateLoss() continuación, se bloquea desaparecerán. Pero, es mejor que no hagas eso. Es mejor que se asegure de nunca cambiar sus fragmentos, excepto cuando la aplicación esté completamente activa. A veces eso significa nunca cargar un fragmento desde OnActivityResult(), sino marcar para ejecutar en su onPostResume(), y evitar realizar cambios de UI en hilos asincrónicos que asumen erróneamente que no podría haber matado la actividad mientras tanto.

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

Una de las formas más recientes de Android circa Oreo, creo, 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 con varios elementos de código y bastante rutinariamente.

Cuestiones relacionadas