¿Cuándo se llaman onSaveInstanceState () y onRestoreInstanceState (), exactamente?

La figura siguiente (del documento oficial ) describe el ciclo de vida bien conocido de una actividad de Android:

Introduzca aquí la descripción de la imagen

Por otro lado, cuando la actividad es destruida por el sistema (por ejemplo porque la memoria necesita ser recuperada), el estado de la actividad es a veces guardado y restaurado automáticamente por medio de los métodos onSaveInstanceState() y onRestoreInstanceState() , como se ilustra Por la siguiente figura (también del documento oficial ):

Introduzca aquí la descripción de la imagen

Soy consciente de que onSaveInstanceState() no siempre se llama cuando una actividad está a punto de ser destruida. Por ejemplo, si se destruye porque el usuario ha presionado el botón "Atrás", el estado de actividad no se conserva. Pero en los casos en que el estado se guarda y se restaura, y onSaveInstanceState() / onRestoreInstanceState() se llama, cuando exactamente se llaman ?

Por ejemplo, según las figuras anteriores, onRestoreInstanceState() podría llamarse antes onStart() , o después onStart() pero antes onResume() , o después onResume() . Del mismo modo, existen varias posibilidades para onSaveInstanceState() . Entonces, ¿cuándo se llaman exactamente?

Idealmente, lo que me gustaría es ver un diagrama combinado que muestra los estados del ciclo de vida de la actividad y los métodos de salvar / restaurar , si existe.

    Por la documentación :

    Void onRestoreInstanceState (Paquete savedInstanceState)

    Este método se llama entre onStart() y onPostCreate(Bundle) .

    Void onSaveInstanceState (Bundle outState)

    Si se llama, este método ocurrirá antes onStop() . No hay garantías sobre si ocurrirá antes o después de onPause() .

    No se define como cuando onSaveInstanceState() se puede llamar, la única garantía que tenemos es ese rango.

    Según doc1 y doc2

    OnSaveInstanceState

    Antes de Honeycomb, las actividades no se consideraban matables hasta después de haber sido detenidas, lo que significa que onSaveInstanceState () se llamó inmediatamente antes onPause (). Empezando con Honeycomb, sin embargo, las actividades se consideran matables sólo después de que se han detenido, lo que significa que onSaveInstanceState () ahora se llamará antes onStop () en lugar de inmediatamente antes onPause ().

    OnRestoreInstanceState

    Este método se llama entre onStart () y onPostCreate (Bundle) cuando la actividad se está reinicializando desde un estado previamente guardado

    Esta es una información adicional para onSaveInstanceState (Bundle)

    De documentos

    No confunda este método con las devoluciones de llamada del ciclo de vida de la actividad, como onPause (), que siempre se llama cuando una actividad se está colocando en segundo plano o en camino a la destrucción, o onStop () que se llama antes de la destrucción. Un ejemplo de cuando onPause () y onStop () es llamado y no este método es cuando un usuario navega de vuelta de la actividad B a la actividad A: no hay necesidad de llamar a onSaveInstanceState (Bundle) en B porque esa instancia particular nunca será restaurada , Por lo que el sistema evita llamarlo. Un ejemplo cuando onPause () se llama y no onSaveInstanceState (Bundle) es cuando se inicia la actividad B delante de la actividad A: el sistema puede evitar llamar a onSaveInstanceState (Bundle) sobre la actividad A si no se cancela durante la vida de B desde El estado de la interfaz de usuario de A permanecerá intacto.

    Por lo tanto, es la implementación por defecto para ..

    La implementación por defecto se encarga de la mayoría del estado de UI por instancia para usted llamando a onSaveInstanceState () en cada vista de la jerarquía que tiene un id y al guardar el id de la vista actualmente enfocada (todo lo cual es restaurado por el Implementación por defecto de onRestoreInstanceState (Bundle)). Si reemplaza este método para guardar información adicional no capturada por cada vista individual, es probable que desee llamar a través de la implementación predeterminada. De lo contrario, esté preparado para guardar todo el estado de cada vista.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.