¿Por qué onRestoreInstanceState () nunca se llama
Estoy intentando ahorrar datos en mi actividad y restaurarla. Ahorro datos en onSaveInstanceState()
y luego intento restaurar los datos en onRestoreInstanceState()
.
Configurar el punto de interrupción, el método onSaveInstanceState()
get called. Pero onRestoreInstanceState()
o onCreate()
nunca lo hicieron.
Aquí están mis pasos:
- Comenzar mi
Activity
- Presione el botón "Inicio" en el teléfono.
onSaveInstanceState()
se llama. - Haga clic en el icono del lanzador y vuelva a iniciar mi
Activity
.
En este momento, sólo onRestart()
se llama. Pero no onRestoreInstanceState()
o onCreate()
.
¿Alguien sabe por qué?
Bueno, si se llama onRestart()
, el valor de las variables de instancia sería mantenido por la propia pila de aplicaciones y, por lo tanto, no es necesario restaurarlas.
onCreate()
método onCreate()
sólo se llama cuando onStop()
su Activity
se llama y el proceso se onStop()
.
Consulte el Ciclo de vida de Activity
la Activity
Cycle de vida de la aplicación para obtener una comprensión clara.
Es posible que desee comprobar si se llama al método onStop()
y si se onStop()
el proceso. No creo que su proceso sea asesinado por el escenario que usted ha descrito.
El método onRestoreInstanceState()
es muy complicado. No sé cuándo exactamente se llama pero vi que fue llamado una vez mientras cambiaba de Potrait a Landscape.
De doc:
El sistema llama aRestoreInstanceState () sólo si hay un estado guardado para restaurar.
He hecho una pregunta similar anteriormente aquí
He aquí algunos pasos para probar onRestoreInstanceState()
:
- Presione la pantalla de inicio
- Eliminar la aplicación mediante adb
- Inicia tu aplicación de nuevo
Consulte el siguiente enlace para ver cómo probar onSaveInstanceState()
y onRestoreInstanceState()
en un dispositivo real o en el emulador.
Este método utiliza la configuración de AlwaysFinish, que es más simple y más rápido que matar procesos. Este método también proporciona control de nivel de Activity
lugar de control de nivel de proceso:
Siga estos pasos (Uso de Android Studio):
- Crear nuevo filtro de Logcat, por ejemplo, AppState
-
Inicie la aplicación en su emulador. Ya verás:
I / AppState: onCreate
I / AppState: onStart
I / AppState: onResume
-
Presione Ctl-F12 para girar el emulador. Ya verás:
I / StateChange: onPause
I / StateChange: onSaveInstanceState
I / EstadoCambiar: onStop
I / StateChange: onDestroy
I / StateChange: onCreate
I / StateChange: onStart
I / StateChange: onRestoreInstanceState
I / StateChange: onResume
Esto causa la destrucción y recreación de la actividad haciendo un cambio de configuración en el dispositivo, como la rotación de retrato a paisaje.