Guía Práctica De Recetas Para Cocinar Con Android
Enviado por garusis • 27 de Septiembre de 2014 • 4.834 Palabras (20 Páginas) • 196 Visitas
INTRODUCCIÓN
E
l desarrollo de las tecnologías móviles se ha hecho cada vez más evidente en la última década, llevando el desarrollo de aplicaciones, a un nuevo entorno en el que nuevas tecnologías surgen constantemente ofreciendo múltiples alternativas de desarrollo. Innovar en un entorno así, no es nada sencillo y para ello se requiere de ingenio y seguridad, como la de un chef que conoce todas sus especias y condimentos, así como el resultado de sus combinaciones. Haciendo caso a esta analogía, es posible entender que una gran practica para lograr una obra de arte en el campo de los dispositivos móviles, es necesario conocer nuestros “ingredientes”, su diseño, función, así como también la forma en que interactúan entre ellos.
En los últimos años, Android se ha convertido en una de las más populares especias en el mundo debido a su fácil comprensión, su forma de interactuar con componentes tan escasos como la memoria RAM o procesadores de bajo consumo de energía y su gran capacidad para combinarse y adaptarse a otros ingredientes y como tal, representa un paso importante para quien desea comprender el uso, no solo de Android, sino también de los componente que interactúan con él, sus capacidades y limitaciones, permitiéndole convertirse poco a poco en un gran “chef”.
A través de este artículo exploraremos puntos específicos sobre Android, como los son la gestión de memoria, planificación de procesos y recursos, comunicación de procesos y la interacción existente entre los distintos componentes de esta plataforma, que permitirán al lector, hacerse una idea clara de cómo Android responde a cada una de estas tareas.
Arquitectura Básica de Android
Android puede ser comprendido como un sistema operativo por capas para dispositivos móviles, que ofrece principalmente: una capa aplicaciones del sistema; una capa compuesta por el Framework de aplicaciones Java; una capa del middleware de aplicaciones, compuesta por la maquina virtual Dalvik (basada en la Maquina Virtual Java, para ejecutar las aplicaciones Java), las librerías del núcleo y el set de librerías usadas a través del framework de aplicaciones; finalmente, se encuentra el Kernel, que representa el corazón de la plataforma en si, y que desde sus primeras versiones de Android, hasta su versión 3.x (Honeycomb), se ha caracterizado por usar las distintas revisiones del kernel Linux en su versión 2.6. [1][2]
Las tareas de bajo nivel, como la administración de recursos, creación, destrucción y planificación de procesos y Threads (Scheduling), gestión de memoria, y la interacción con los dispositivos a través de los respectivos drivers (incluidos también en el kernel), son tratadas principalmente por el kernel Linux, pero pueden ser solicitadas por alguna de las capas superiores, a través de Dalvik o las librerías para el Framework de aplicaciones, permitiendo a las aplicaciones de alto nivel, tener cierto tipo de interacción indirecta con el kernel[3].
Procesos
Una de las principales capacidades que deben tener los Sistemas Operativos (S.O) es la de gestionar procesos (crear, destruir, planificar, etc), ya que con ellos, es con quien directamente se entiende el S.O. para entender correctamente la gestión de procesos en Android a través de Zygote, Dalvik y el Kernel Linux, primero debemos entender el proceso de arranque del mismo.
Arranque de Android
El proceso de arranque de Android, inicia con la ejecución del código de Arranque del ROM, esta es una pieza de código que se encuentra ensamblada en un circuito ASIC, el cual se encarga de detectar un dispositivo de arranque, asi como de cargar el respectivo Boot Loader a la RAM interna, para luego iniciar la ejecución del mismo. El Boot Loader es un programa especial, separado del S.O, que se encarga principalmente de inicializar la memoria y cargar el Kernel en RAM. Una vez que el Kernel ha sido cargado en memoria, el Boot Loader inicia la ejecución del mismo, entregando al Kernel, la responsabilidad del sistema [4].
El arranque del Kernel Linux en Android es similar a la carga en otros sistemas, se pondrá en marcha todo lo necesario para que el sistema funcione: inicializar los controladores de interrupciones, establecer protecciones de memoria, habilitar el uso de memoria virtual, caches y Scheduling. Luego de esto, lanzara el proceso “init”, que utilizara el fichero init.rc, el cual describe los servicios del sistema, sistemas de archivos y otros parametros necesarios para lanzar los procesos del servicio de sistema, entre ellos el servicio Zygote, quien se quedara con un socket abierto, esperando a que se le solicite lanzar nuevas actividades.
Finalmente, se arranca el sistema servidor, quien es el encargado de iniciar todos los servicios de Android como el administrador de telefonía o Bluetooth. Una vez iniciados los servicios se hace un llamado a ACTION_BOOT_COMPLETED, indicando que el sistema ha terminado de cargar.
El proceso de arranque de Android nos permite entender que aunque las tareas de bajo nivel son principalmente ejecutadas por el kernel, también pueden tener una relación con los servicios existentes, además de darnos una breve introducción al servicio Zygote.
Creación de Procesos (Zygote-Dalvik-Kernel)
Zygote es un servicio encargado de inicializar la MV Dalvik, precargando y preinicializando las clases comunes de Android que serán usadas por las aplicaciones. Una vez terminada, Zygote abre un socket que recibe órdenes del Framework de Aplicación cada vez que una nueva aplicación es iniciada. Cada vez que se inicia una nueva aplicación, Zygote crea una nueva instancia de la MV, basada en la MV que ya ha sido instanciada (fork), la cual se encargara de ejecutar la nueva aplicación [5].
Debido a que las clases comunes de Android son compartidas por todas las instancias de la MV, la nueva instancia comparte, con la MV original, el sector de memoria donde ya han sido precargadas y preinicializadas las librerías. Adicionalmente se le asigna una serie de direcciones de memoria, que serán independientes de los demás instancias de la MV, para uso del proceso.
Ciclo de Vida:
El ciclo de vida de una aplicación en Android es estrictamente manejado por el kernel, pero basado en el tipo de aplicación, las necesidades del usuario y los recursos disponibles.
Fig.1. Esquema de los estados de transición de una Actividad.
Debido a que en los dispositivos móviles se debe manejar bajos consumos de memoria (este tema será tratado en la sección IV-D), El administrador de actividades de Android puede tomar decisiones a cerca del estado actual de una aplicación. Por ejemplo, una actividad
...