Gestión de memoria en Android

Si damos una visión fría de lo que es Android, es un conjunto de software para dispositivos móviles que incluye un sistema operativo, middleware y aplicaciones clave. El SDK de Android proporciona las herramientas y APIs necesarias para empezar a desarrollar aplicaciones en la plataforma Android usando el lenguaje de programación Java.

 

La memoria en Android

 

Como hemos dicho más de una vez, Android es un Sistema operativo basado en Linux con el kernel 2.6.x, simplificada para manejar la mayoría de tareas . Utiliza bibliotecas nativas en C abiertas. Todas las operaciones básicas del sistema operativo como de E / S, gestión de memoria, y así sucesivamente, son manejados por el de kernel de Linux.

La gestión de memoria es bastante común. Al igual que Java y NET., Android utiliza el entorno de ejecución y la máquina virtual para gestionar la memoria de la aplicación. A diferencia de cualquiera de estos dos marcos, el entorno de ejecución de Android también maneja los tiempos de vida del proceso. Android asegura la respuesta de la aplicación, deteniendo y matando a los procesos que obstaculizan la fluidez y  libera recursos para las aplicaciones de mayor prioridad.

 

Cada aplicación Android se ejecuta en un proceso independiente dentro de su propia instancia de Dalvik, renunciando a toda responsabilidad de la memoria y la gestión de procesos.

 

Dalvik y el entorno de ejecución de Android se posicionan en la parte superior de un núcleo de Linux que se encarga de la interacción de bajo nivel del hardware, incluyendo los drivers y la gestión de memoria, mientras que el conjunto de API proporciona acceso a todos los servicios de bajo nivel, características y hardware.

 

Dalvik Virtual Machine es una máquina virtual basada en registros que ha sido optimizada para asegurar que un dispositivo puede ejecutar múltiples instancias de manera eficiente. Se basa en el kernel de Linux para la gestión de memoria de bajo nivel.

 

La máquina virtual Dalvik

 

Uno de los elementos clave de Android es la máquina virtual de Dalvik. En lugar de utilizar una tradicional máquina virtual Java (VM), tales como Java ME (Java Mobile Edition), Android utiliza su propia máquina virtual personalizado diseñado para asegurar que la multitarea se ejecutan de manera eficiente en un único dispositivo.

La máquina virtual Dalvik utiliza el dispositivo del kernel de Linux subyacente para manejar bajo nivel de funcionalidad, incluyendo la seguridad,la planificación de procesos, y la gestión de la memoria.

Todo el hardware de Android y acceso a los servicios del sistema se gestiona mediante Dalvik como un nivel intermedio. Mediante el uso de una máquina virtual para organizar la ejecución de aplicaciones, los desarrolladores tienen una capa de abstracción que asegura que nunca tendrá que preocuparse de una aplicación de hardware en particular.

La máquina virtual Dalvik lanza procesos ejecutables Dalvik, un formato optimizado para asegurar la mínima huella en la memoria . Los ejecutables. Dex se crean mediante la transformación de las clases de Java lenguaje, compilado utilizando las herramientas proporcionadas en el SDK.

 

Prioridad de procesos

 

El orden en que los procesos para reclamar los recursos está determinada por la prioridad de las aplicaciones almacenadas. Una prioridad de aplicación es igual a prioridad más alta de sus componentes.

Cuando ambos procesos son igual de largos, los dos tienen la misma prioridad, el proceso que ha tenido una prioridad más baja se mató en primer lugar. La prioridad del proceso también se ve afectada por las dependencias entre procesos, si una aplicación tiene una dependencia en un servicio o proveedor de contenidos suministrados por una segunda aplicación, la aplicación de secundaria tendrán al menos una prioridad tan alta como la aplicación que da soporte.

Todas las aplicaciones Android se mantendrá en funcionamiento y en la memoria hasta que el sistema necesitara de sus recursos para otras aplicaciones.

 

Es importante asegurarse que la  prioridad del proceso es apropiada para el trabajo que está haciendo. Si no fuese así, el proceso podría ser matado mientras está en medio de algo importante.

 

Tipos de procesos ordenados por su prioridad:

 

– Procesos Activos

Los procesos activos o en primer plano, son con los que existe una interacción con el usuario. En general, hay pocos procesos en un mismo periodo de tiempo, y se matan sólo como último recurso.

 

Procesos activos incluyen:

 

-Las Activity’s en un estado «activo», es decir, que están en primer plano y responden a eventos de usuario.

-Actividades, Servicios, o  receptores que se está ejecutando actualmente un controlador de eventos OnReceive.

-Los servicios que se están ejecutando OnStart, onCreate o con el controlador de eventos OnDestroy.

 

– Procesos Visibles

Como el nombre sugiere, las actividades visibles son visibles, pero no son en primer plano o de responder a eventos de usuario. Esto ocurre cuando una actividad se muestra parcialmente (una pantalla que no está completa o transparente). En general, existen muy pocos procesos visibles, sólo se matan en circustancias extremas para permitir que los procesos activos continuen.

Respecto a los servicios, los que dan soporte a procesos activos que están en ejecución se le da una prioridad sensiblemente inferior a los mismos que los servicios no interactúan directamente con el usuario.

 – Procesos en segundo plano.

Los procesos en segundo plano engloban a las actividades que no son visibles y están en ejecucuón.  No será en general un gran número de procesos.

center

– Procesos vacíos

Los Procesos vacíos se utilizan para mejorar el rendimiento general del sistema, a menudo Android retiene aplicaciones en la memoria después de haber llegado al final de su vida.  Se mantiene esta memoria caché para mejorar el tiempo de respuesta de las aplicaciones al arrancarse.

Cómo utilizar la memoria de manera eficiente

 

Android gestiona las aplicaciones abiertas que se ejecutan en segundo plano. Esto significa que cierra las aplicaciones cuando el sistema necesita más memoria, de forma que no sea necesario desde la memoria secundaria. Sin embargo, la mayoría de los usuarios de Android no están muy satisfechos con la forma en que se gestiona porque a veces deja demasiados procesos en ejecución que provoca la ya conocida lentitud respecto a ios (iPhone, iPad…).  Para solucionarlo, siempre podemos usar un task killer