Hola, me pregunto cómo administra Android la memoria y no puedo encontrar una respuesta precisa en ninguna parte. Supongamos que tengo una aplicación con 5 actividades en la pila de actividades actual (4 se detienen y 1 se reanuda), no hay ningún servicio conectado. Presiono el botón INICIO para detener todas mis actividades. Comienzo alguna otra aplicación que consume memoria y la memoria general del dispositivo comienza a ser baja. Y la pregunta es
... ¿Qué pasará con mi aplicación?
- ¿El sistema puede destruir solo una o algunas de mis actividades para recuperar la memoria?
- ¿El sistema eliminará todo el proceso de mi aplicación? ¿Todas las actividades serán bien destruidas?
- ¿Qué pasará cuando vuelva a mi aplicación cuando se eliminó por completo? ¿Comenzará desde el principio (como el primer inicio) o intentará recuperar las actividades al estado anterior? Si es así, ¿es solo el que está en la parte superior de la pila o todos?
ACTUALIZAR:
Antes de hacer esta pregunta, he visto el ciclo de vida de la actividad varias veces, pero no tiene respuestas a mis preguntas. Hice algunas pruebas y tengo algunas respuestas. "Detener proceso" en DDMS fue una pista para la prueba.
No he probado la respuesta para la pregunta 1, pero como dice la guía:
Si una actividad se pone en pausa o se detiene, el sistema puede eliminar la actividad de la memoria pidiéndole que finalice o simplemente matando su proceso.
Parece que una o más de las actividades se pueden destruir suavemente (con el método onDestroy) sin matar el proceso. Simplemente obtendrá (onCreate + bundle) cuando vuelva a ellos.
Respuesta a la pregunta 2:
SI. Generalmente, el sistema mata todo el proceso, esto significa que todos los datos, incluidas las actividades y los campos estáticos, se destruyen. Esto NO se hace bien: no obtendrá onDestroy o finialize () para ninguna de sus actividades pausadas / detenidas. Es por eso que saveInstanceState () se llama justo antes del método onPause. onPause es básicamente el último método en el que debe guardar algo porque después de este método nunca podría ver onStop o onDestroy. El sistema puede simplemente matar el proceso destruyendo todos sus objetos, lo que sea que contengan y lo que sea que estén haciendo.
Respuesta a la pregunta 3:
¿Qué pasará cuando vuelva a una aplicación muerta?
- Antes de Android 2.2, la aplicación se iniciará desde el principio, con actividad de inicio.
- A partir de 2.2, el sistema restaurará el estado anterior de la aplicación. Qué significa eso? Significa que se volverá a crear la última actividad visible (onCreate + bundle). ¿Qué pasará con la pila de actividades? La pila está bien, pero todas las actividades están muertas. Cada uno de ellos se volverá a crear (onCreate + bundle) cuando regrese a él con el botón Atrás. Hay una cosa más sobre eso:
Normalmente, el sistema borra una tarea (elimina todas las actividades de la pila por encima de la actividad raíz) en determinadas situaciones cuando el usuario vuelve a seleccionar esa tarea desde la pantalla de inicio. Normalmente, esto se hace si el usuario no ha visitado la tarea durante un período de tiempo determinado, como 30 minutos.
¿Conclusión?
- No crea que el manejo de problemas de rotación de actividades puede resolverse con android: configChanges = "Orientación". Cuando hagas eso, tendrás muchos otros problemas de los que ni siquiera eres consciente.
- Pruebe su aplicación con DDMS - Botón Detener proceso. Mira esto
- Tenga cuidado al utilizar variables estáticas. No piense que cuando los inicializó en la actividad 1, los tendrá inicializados en la actividad 2. El único lugar seguro para inicializar la estática global sería la clase Aplicación.
- Recuerde que es posible que nunca vea onStop o onDestroy. Cierre archivos / bases de datos, detenga los descargadores en onPause. Cuando desee que la aplicación haga algo en BG, use el servicio de primer plano.
Eso sería todo ... Espero haber ayudado con mi essey :)
