La siguiente figura (del documento oficial ) describe el ciclo de vida conocido de una actividad de Android:
Por otro lado, cuando el sistema destruye la actividad (por ejemplo, porque es necesario recuperar la memoria), el estado de la actividad a veces se guarda y restaura automáticamente mediante los métodos onSaveInstanceState()
y onRestoreInstanceState()
, como se ilustra en la siguiente figura (también del documento oficial ):
Soy consciente de que onSaveInstanceState()
está no siempre llama cuando una actividad está a punto de ser destruido. Por ejemplo, si se destruye porque el usuario ha presionado el botón "Atrás", el estado de actividad no se conserva. Sin embargo, en los casos en que el estado está guardada y restaurada, y onSaveInstanceState()
/ onRestoreInstanceState()
ser llamado, cuando exactamente cómo se llaman ?
Por ejemplo, de acuerdo con 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 muestre los estados del ciclo de vida de la actividad y los métodos de guardar / restaurar , si es que existe.
fuente
Respuestas:
Según la documentación :
fuente
Según doc1 y doc2
fuente
Además de las respuestas ya publicadas, se ha introducido un cambio sutil en Android P, que es:
Fuente: docs
En cuanto a por qué se introduce este cambio, aquí está la respuesta:
Fuente: docs
fuente
Do you know how will behave app that target P but runs on lower api?
siempre que la aplicación se ejecute en, por ejemplo, M, entonces la versión de Android que tiene este dispositivo no contiene cambios, que se introducen en P, lo que significa que, independientemente de que haya especificado el objetivoP
, no verá diferente para dispositivos pre-P. Espero que esto responda a su pregunta.Esta es una información adicional para onSaveInstanceState (Bundle)
de documentos
Entonces es una implementación predeterminada para ...
fuente
// Esta devolución de llamada se llama solo cuando hay una instancia guardada previamente guardada usando // onSaveInstanceState (). Restauramos algún estado en onCreate () mientras que opcionalmente podemos restaurar // otro estado aquí, posiblemente utilizable después de que se haya completado onStart (). // El paquete SavedInstanceState es el mismo que se usa en onCreate ().
fuente