jueves, 24 de febrero de 2011

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 mayoria de los casos, cada aplicacion 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.

Tipos de procesos

Para decidir que proceso debe ser liquidado, Android ordena los procesos por importancia:

  1. 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 sólamente se liquidarán si la memoria es tan baja que ni matando al resto de procesos tenemos los recursos necesarios.
  2. Visible process. Es el que contiene una actividad que es visible, pero no en primera fila (se ha llamando al metodo onPause()). Por ejempo, estoy leyendo un email, y hago click en un enlace http y 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.
  3. 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.
  4. 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.
  5. Empty process. Es un proceso que no alberga nada ya, lo usa Android como cahe para cuando se crea un proceso nuevo.



Al Turrón


Android puede en cualquier momento pausar, parar, destruir nuestra aplicación según las necesidades del momento y nosotros debemos controlar todos estos eventos para hacer una aplicación robusta.

  • onCreate() Llamado cuando la actividad es llamada por primera vez. Es donde debes crear la inicialización normal de la aplicación, crear vistas, hacer los bind de los datos, etc. Este método te da acceso al estado de la aplicación cuando se cerró. Después de esta llamada siempre se llama al onStart().
  • onRestart() Llamada cuando tu actividad ha sido parada, antes de volver a ser empezada. Siempre viene despues un onStart().
  • onStart() Llamada cuando la actividad esta siendo visible por el usuario. Después de ésta, se puede ir al onResume() si la actividad va a ser visible o se puede ir al onStop() si se esconde.
  • onResume() Llamada cuando la actividad va a empezar a interactuar con el usuario, en este punto es el último punto antes de que el usuario ya vea la actividad y pueda empezar a interactuar con ella. Siempre despues de un onResume() viene un onPause().
  • onPause() LLamada cuando el sistema va a empezar una nueva actividad. Ésta necesita parar animaciones, y parar todo lo que esté haciendo. Hay que intentar que esta llamada dure poco tiempo, porque hasta que no se ejecute este método no arranca la siguiente actividad. Después de esta llamada puede venir un onResume() si la actividad vuelve a primer plano o un onStop() si se hace invisible para el usuario.
  • onStop() Llamada cuando la actividad ya no es visible al usuario, porque otra actividad ha pasado a primer plano. Desde Aqui se puede ir al onRestart() si vuelve a primer plano o al onDestroy() si se destruye del todo.
  • onDestroy() Esta es la llamada final a la actividad, después de ésta, es totalmente destruida.

Un gráfico cortesía de google explicando el proceso gráficamente

2 comentarios:

jordi.aguade dijo...

Buenos días,

estoy intentando hacer mi primer juego usando AndEngine... pero me he encontrado con un problema.
Cuando el juego ya está corriendo, si bloqueo el teléfono y posteriormente vuelvo a desbloquearlo, el juego vuelve a empezar desde su inicio.

Saludos

jordi.aguade@gmail.com

David sonique dijo...

Buenas,

supongo que el problema está en guardar el estado,
lo ideal sería que lo hicieras en onPause() y lo retomarás en onResume(), a onStop() puede no llegar y destruir antes el proceso que contiene la actividad.

Saludos.

David.sonike@gmail.com

Publicar un comentario