ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Guía Práctica De Recetas Para Cocinar Con Android

garusis27 de Septiembre de 2014

4.834 Palabras (20 Páginas)211 Visitas

Página 1 de 20

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 (aplicación que interactúa con el usuario usando una Interfaz Grafica) tiene un ciclo de vida determinado mostrado en la Fig. 1. Cuando la Actividad es creada, se realiza un llamado a onCreate(), quien se encarga de la inicialización y configuración de elementos estáticos. Una vez que es creada, la aplicación puede ser o no, visible, osea puede estar totalmente oculta o puede ser total o parcialmente visible para el usuario. Una vez que la aplicación es visible para el usuario, se hace un llamado a onStart(). Cuando la aplicación se ha puesto en primer plano, se hace un llamado a onResume() para iniciar la interacion de la aplicación, con el usuario (Iniciar animaciones, activar la cámara u otros dispositivos, etc). Si la aplicación adquiere foco y el usuario inicia la interaccion con la aplicación se hace un llamado a onResume() y la aplicación se mantiene activa, hasta que pierde foco o el dispositivo se suspenda, donde hace un llamado a onPause(). si se mantiene en estado pausado por largo tiempo o la aplicación a dejado de ser totalmente visible, se hace un llamado a onStop()[6].

A partir del momento en que la actividad deja de ser visible, el administrador de actividades, con el objetivo de obtener mayor memoria disponible o liberar recursos, puede matar el proceso en cualquier momento, y volverlo a crear cuando esta sea requerida (vuelva a ser visible o vuelva a tener foco) haciendo nuevamente un llamado a onCreated()[7].

Estos pasos pueden repetirse indefinidamente hasta que la actividad finalmente sea terminada, donde hará un llamado a onDestroy(), para finalmente liberar absolutamente todos los recursos usados por la aplicación. Asi mismo, dependiendo el tipo de aplicación que se este ejecutando, los estados de transición pueden variar; por ejemplo, un servicio (aplicación que no posee interfaz grafica y que no tiene interacción directa con el usuario), no cuentan con métodos onResume(), onPaused() ni onStop(); pero para servicios interactivos, se cuenta con métodos como onBind(), onUnbind() y onRebind() que permiten iniciar, detener y reiniciar un servicio.

Planificación:

La planificación de procesos es una tarea totalmente delegada al kernel. Este toma la decisión de cuándo y cual procesos seleccionar para que use el procesador, siguiendo políticas basadas en un ranking de procesos, de acuerdo a su prioridad.

La prioridad de los procesos es dinámica y es ajustada por el kernel por medio de penalizaciones. Cuando un proceso es interrumpido por largo tiempo, su prioridad aumenta, mientras que los procesos que hacen uso intensivo del procesador, son penalizados y después de varias penalizaciones, su prioridad disminuye. De esta forma se clasifican en procesos interactivos (interactúan constantemente con el usuario o los dispositivos I/O, interrumpiéndose constantemente), Procesos Batch (hacen uso intensivo del procesador, requieren

...

Descargar como (para miembros actualizados) txt (31 Kb)
Leer 19 páginas más »
Disponible sólo en Clubensayos.com