Controlar el reinicio de la actividad de Android después de que se detiene un proceso
Mi aplicación se ejecuta en un dispositivo especial que ejecuta una compilación personalizada de Android Gingerbread 2.3.7
Hay condiciones en las que el sistema terminará mi aplicación. Supongo que el fabricante del dispositivo considera estas situaciones de emergencia en las que todas las aplicaciones de terceros deben cerrarse inmediatamente para que el dispositivo pueda realizar sus tareas principales.
Puedo duplicar el comportamiento que veo en el dispositivo usando un emulador y en DDMS seleccionando mi tarea y haciendo clic en el botón "Detener proceso". Aquí está el comportamiento que veo.
Mi aplicación normalmente pasa por cuatro actividades, la Actividad A inicia la actividad B, B inicia la Actividad C y C inicia la actividad D. Entonces, cuando la actividad D se ejecuta en la parte superior, mi pila es:
A B C D
Si en este punto, el proceso finaliza, la Actividad D no recibe onPause () o una llamada onStop (). No tiene oportunidad de salvar su estado.
Una vez que el proceso está inactivo, el ActivityManager de Android inicia una nueva tarea para mi aplicación y lanza la Actividad C. Creo que este es el comportamiento estándar de Android para reiniciar las aplicaciones bloqueadas.
Mi pregunta es ¿puedo controlar este comportamiento de reinicio? Si Android va a reiniciar mi aplicación, necesito restaurar la pila de actividades, la Actividad C realmente no tiene sentido que se ejecute de forma independiente (al hacer clic en el botón Atrás saldría de la aplicación y eso no tiene sentido para esta actividad).
¿Puedo evitar este reinicio? ¿Puedo hacer que el reinicio inicie todas mis actividades en secuencia? ¿Puedo reiniciar solo iniciar la actividad A?
Encontré estodiscusión interesante lo que creo explica por qué se reinicia la Actividad C y no la Actividad D.
En cuanto a cuando se reinicia una actividad: si el proceso que ejecuta la actividad en primer plano desaparece, el sistema descartará esa actividad si no tiene un estado guardado válido para ella (generalmente significa que está en pausa y le ha dado al sistema el resultado de onSaveInstanceState desde antes de la pausa). Una vez que ha decidido si desecha o no esa actividad, reanudará cualquier actividad que esté ahora en la parte superior de la pila. Si esta es una de sus actividades, ya sea porque tiene otra detrás de la que se bloqueó, o la que se bloqueó fue de alguna manera el estado de pausa establecido, entonces comenzará su proceso nuevamente para mostrar esa actividad principal.
Y algunas preguntas similares como¿Prevenir la restauración de la pila de actividades? y esta interesantehilo