Ciclo de vida de una aplicación Android
¿Porqué
es importante esto?
El ciclo de vida de una aplicación en Android es manejada
por el sistema operativo, basándose en las necesidades del usuario, los
recursos disponibles, etc. Si tenemos una aplicación que está consumiendo
muchos recursos y arrancamos otra nueva aplicación, el sistema operativo
probablemente le diga a la aplicación que se queda en segundo plano que libere
todo lo que pueda, y si es necesario la cerrará. En Android los recursos son
normalmente muy limitados y por eso el sistema operativo tiene más control
sobre las aplicaciones que en programas de escritorio.
En la mayoría de los casos, cada aplicación Android corre
en su propio proceso de Linux. Este proceso es creado para la aplicación cuando
la arrancamos y seguirá corriendo hasta que no sea necesario y el sistema
reclame recursos para otras aplicaciones y se los dé a éstas.
Hemos
visto que
un proyecto Android está formado por varias carpetas estructuradas, pero lo que
se instala en los dispositivos es un archivo con extensión .apk (application package).
Estos archivos se generan con la herramienta
apk (En el directorio tools del SDK) al terminar de compilar.
Las aplicaciones en Android tienen su propio
entorno seguro de ejecución:
·
Cada aplicación se ejecuta en su propio
proceso Linux. El sistema lo crea cuando ejecutamos la aplicación y lo destruye
cuando no se use pasado un rato o cuando el Sistema necesite recursos para otra
aplicación
·
Cada proceso se ejecuta en su propia máquina
virtual, de esta manera está aislada del resto. De esta forma ante cualquier
fallo en la aplicación solo afecta a su máquina virtual, no al resto.
·
A cada aplicación se le asigna un
identificador de usuario (uid) distinto. Los permisos de los archivos que
refieren a la aplicación (caché, datos etc) son solo accesibles por dicho
usuario. Es posible asignar un mismo uid a dos aplicaciones para que compartan una
misma máquina virtual y recursos.
Tipos de procesos
Para decidir qué proceso debe ser liquidado, Android ordena
los procesos por importancia:
Foregound
Process. Es la aplicación que contiene la actividad
que ahora mismo se está mostrando en pantalla (Se ha llamado al método
onResume()). Habrá muy pocos procesos Foreground
corriendo a la vez en el sistema y estos procesos solamente se liquidarán si la
memoria es tan baja que ni matando al resto de procesos tenemos los recursos
necesarios.
Visible
process. Es el que contiene una actividad que es
visible, pero no en primera fila (se ha llamando al método onPause()). Por ejemplo,
estoy leyendo un email, y hago click en un link http , abre el navegador y me
lleva a esa web. En ese momento el navegador sería Foregound Process y el cliente de mail sería un Visible process. Estos procesos son considerados importantes por
el sistema operativo y normalmente no se cierran.
Service
process. Es un servicio como los de cualquier Unix. Estos
procesos hacen cosas en segundo plano que normalmente son importantes, el
sistema nunca va a liquidar un servicio a menos que sea necesario para mantener
vivos todos los Visible y Foreground.
Background
process. Es un proceso que contiene una actividad que
actualmente no es visible por el usuario, estos procesos no tienen demasiada
importancia, puede ser un programa que arranqué hace tiempo y no lo he vuelto a
usar, pasa a estar en background. Por eso es importante que cuando nuestra
aplicación pase a Background, liberar en la medida de lo posible todos los
recursos que podamos.
Empty
process. Es un proceso que no contiene nada ya, lo
usa Android como cache para cuando se crea un proceso nuevo.
Android
va destruyendo componentes inactivos para liberar memoria, pero los elimina
teniendo en cuenta cual es el de menor importancia:
·
Los
primeros en ser eliminados son los procesos vacíos (Son aplicaciones cerradas
que se mantienen en memoria para cargar rápidamente la aplicación la próxima
vez que se abra.)
·
Procesos
en segundo plano, estos son las aplicaciones que ya han ejecutado su
método onStop(), Android confecciona una lista con los procesos
en este estado y elimina en primer lugar el más antiguo.
·
Después
elimina los procesos de servicio. (si sigue necesitando más memoria.)
·
Si
aún necesita más memoria, elimina los procesos pausados.
·
Si
con esto sigue necesitando, finalmente elimina el proceso en primer plano.
Es
muy importante implementar bien los métodos de estado, para evitar perder
información.
Entonces
ahora, en la proxima entrada del blog vamos a enfocarnos en los métodos de estado y el ciclo de vida de cada
uno de los componentes principales.
No hay comentarios:
Publicar un comentario