Gestión de procesos y memoria en Android.
Cuando un componente de la aplicación se inicia y la aplicación no tiene ningún otro componente ejecutándose, el sistema de Android inicia un nuevo proceso de Linux para la aplicación con un único subproceso de ejecución. De manera predeterminada, todos los componentes de la misma aplicación se ejecutan en el mismo proceso y subproceso (que se denomina "subproceso principal"). Si el componente de una aplicación se inicia y ya existe un proceso para la aplicación (porque otro componente de la aplicación existe), el componente se inicia dentro de ese proceso y usa el mismo subproceso de ejecución.

Android puede decidir finalizar un proceso en algún momento, cuando la memoria es baja y la requieren otros procesos que son inmediatamente más necesarios para lo que el usuario desea. En consecuencia, los componentes de la aplicación que se ejecutan en el proceso que se cancela son destruidos. Un proceso se inicia de nuevo para esos componentes cuando vuelve a haber trabajo para ellos.

Cuando decidas qué procesos cancelar, el sistema Android pondera su importancia relativa para el usuario. Por ejemplo, cierra más prontamente un proceso que aloja actividades que ya no se ven en la pantalla que un proceso que aloja actividades visibles. La decisión de si se debe finalizar un proceso, por lo tanto, depende del estado de los componentes que se ejecutan en ese proceso. Las reglas que se usan para decidir qué procesos finalizar se analizan a continuación.
Ciclo de vida de los procesos
El sistema Android trata de mantener el proceso de una aplicación el mayor tiempo posible; pero , finalmente, necesita quitar los procesos viejos a fin de recuperar memoria para procesos nuevos o más importantes. Para determinar qué procesos mantener y cuáles finalizar, el sistema coloca cada proceso en una "jerarquía de importancia" según los componentes que se ejecutan en el proceso y el estado de esos componentes. Los procesos con la importancia más baja se eliminan primero, luego, los siguientes con la importancia más baja y así sucesivamente, según sea necesario para recuperar recursos del sistema.
La jerarquía de importancia tiene cinco niveles. La siguiente lista presenta los distintos tipos de procesos en orden de importancia (el primer proceso es el más importante y es el que se finaliza de último):

- Proceso en primer plano:
Un proceso que es necesario para lo que el usuario está haciendo en ese momento.
Por lo general, solo existen unos pocos procesos en primer plano en un momento determinado. Se los cancela solamente como último recurso (si la memoria está tan lenta que no todos pueden seguir ejecutándose). Generalmente, en ese punto, el dispositivo alcanzó un estado de paginación de memoria, por lo que finalizar procesos en primer plano es necesario para mantener la capacidad de respuesta de la interfaz de usuario.
2. Proceso visible:
Un proceso que no tiene ningún componente en primer plano, pero que puede afectar lo que el usuario ve en la pantalla.
Un proceso visible se considera extremadamente importante y no se lo finalizará a menos que sea necesario para mantener todos los procesos en primer plano en ejecución.
3. Proceso de servicio:
Proceso que ejecuta un servicio y que no corresponde a ninguna de las dos categorías precedentes de más importancia. Aunque los procesos de servicio no están vinculados directamente con nada de lo que el usuario ve, generalmente hacen cosas que le interesan al usuario (como reproducir música en segundo plano o descargar datos en la red), por lo que el sistema los mantiene en ejecución a menos que no haya suficiente memoria para retenerlos junto con los procesos en primer plano y visibles.
4. Proceso en segundo plano:
Un proceso que tiene una actividad que actualmente no es visible para el usuario. Estos procesos no tienen un efecto directo en la experiencia del usuario, y el sistema puede finalizarlos en cualquier momento para recuperar memoria para un proceso en primer plano, visible o de servicio. Por lo general, se ejecutan muchos procesos en segundo plano, por lo que se los mantiene en una lista LRU (menos usado recientemente) para garantizar que el proceso con la actividad que el usuario vio más recientemente sea la última en finalizarse. Si una actividad implementa sus métodos de ciclo de vida correctamente, y guarda su estado actual, finalizar sus procesos no tendrá un efecto visible en la experiencia del usuario porque, cuando el usuario vuelve a la actividad, esta restaura todos los estados visibles.
5. Procesos vacíos:
Un proceso que no tiene ningún componente de la aplicación activo. El único motivo para mantener este tipo de proceso activo es por fines de la memoria caché, para mejorar el tiempo de inicio la siguiente vez que un componente necesite ejecutarlo. El sistema suele finalizar estos procesos para equilibrar los recursos generales del sistema entre las memorias caché de procesos y las memorias caché de kernel subyacentes.


Android coloca un proceso en el nivel más alto que puede, según la importancia de los componentes actualmente activos en el proceso. Por ejemplo, si un proceso aloja un servicio y una actividad visible, el proceso se clasifica como un proceso visible y no como uno de servicio.
Además, la clasificación de un proceso se puede incrementar porque otros procesos dependen de él (un proceso que presta servicios a otro proceso nunca se puede clasificar con una posición inferior a la del proceso al que asiste). Por ejemplo, si un proveedor de contenido en el proceso A asiste a un cliente en el proceso B o si un servicio en el proceso A está vinculado con un componente en el proceso B, el proceso A siempre se considera, al menos, tan importante como el proceso B.
Como a un proceso que ejecuta un servicio se le asigna una posición superior que a un proceso con actividades en segundo plano, una actividad que inicia una operación prolongada debería iniciar un servicio para esa operación, en lugar de tan solo crear un subproceso de trabajo, especialmente si la operación durará más que la actividad. Por ejemplo, una actividad que está cargando una imagen en un sitio web debe iniciar un servicio para realizar la carga a fin de que esta pueda continuar en segundo plano incluso si el usuario deja la actividad. El uso de un servicio garantiza que la operación tendrá, como mínimo, prioridad de "proceso de servicio", independientemente de lo que suceda con la actividad. Este es el mismo motivo por el que los receptores de mensajes deben emplear servicios en lugar de tan solo poner las operaciones prolongadas en subprocesos.
Referencias:
https://es.slideshare.net/frankojur/gestion-de-procesos-26985517
http://ramon-gzz.blogspot.com.co/2012/05/tareas-del-sistema-en-android.html
http://ramon-gzz.blogspot.com.co/2012/05/tareas-del-sistema-en-android.html
Comentarios
Publicar un comentario