IllegalStateException: no se puede realizar esta acción después de onSaveInstanceState cuando se usa DialogFragment

Illegalstateexception

Recibí una pregunta hoy. Después de buscar en el registro, vi el siguiente mensaje de error:

|_+_|

La razón de este problema es que DialogFragment tiene un problema al usar el método show (), es decir, ejecutar el siguiente código al mostrar el fragmento:






El motivo de la excepción es que se llama al método commit () después del onSaveInstanceState () de la actividad, lo que provocará un error, porque se llama al método onSaveInstanceState para guardar los datos de la actividad antes de que la actividad esté a punto de ser destruida. Si le agrega Fragmento después de guardar el estado, se producirá un error.
La solución es reemplazar el método commit () con commitAllowingStateLoss (), el efecto es el mismo, luego miro el código fuente de DialogFragment y no puedo encontrar el método show usando commitAllowingStateLoss (), entonces, ¿qué debo hacer? ¿Hazlo?
Piénselo: ¿cree que puede anular el método show de la clase principal? Utilice commitAllowingStateLoss () para reemplazar el método commit (). Sin embargo, descubrí que el método usa variables privadas, lo cual es vergonzoso. Qué hacer, inmediatamente pensé en usar tecnología de reflexión para modificar las variables privadas de la clase principal para asegurar la reescritura Después del método show, otros estados son legales y normales:
El código es el siguiente:



|_+_|

Después de la prueba, no se han encontrado otros problemas hasta ahora, todos pueden señalar lugares irrazonables.

Para agregar, alguien en Internet dijo que después de hacer clic en el botón de inicio, el método onSaveInstanceState () se ejecuta antes que onPause (), y el resultado de mi prueba es que el método onPause () se ejecuta primero, y luego el onSaveInstanceState () se ejecuta el método.
————————————————
Este artículo se reimprime para su propia referencia, el enlace original: https://blog.csdn.net/baidu_28027209/article/details/79740209