Arquitectura
de la plataforma Android
Como ya se ha mencionado,
Android es una plataforma para dispositivos móviles que contiene una pila de
software donde se incluye un sistema operativo, middleware y aplicaciones
básicas para el usuario.
Aplicaciones:
Este
nivel contiene, tanto las incluidas por defecto de Android como aquellas que el
usuario vaya añadiendo posteriormente, ya sean de terceras empresas o de su
propio desarrollo. Todas estas aplicaciones utilizan los servicios, las API y
librerías de los niveles anteriores.
Framework
de Aplicaciones: Representa fundamentalmente el conjunto de
herramientas de desarrollo de cualquier aplicación. Toda aplicación que se
desarrolle para Android, ya sean las propias del dispositivo, las desarrolladas
por Google o terceras compañías, o incluso las que el propio usuario cree,
utilizan el mismo conjunto de API y el mismo "framework",
representado por este nivel.
Entre las API más importantes ubicadas aquí,
se pueden encontrar las siguientes:
ü Activity Manager:
Conjunto de API que gestiona el ciclo de vida de las aplicaciones en Android.
ü Windows Manager:
Gestiona las ventanas de las aplicaciones y utiliza la librería Surface
Manager.
ü Telephone Manager:
Incluye todas las API vinculadas a las funcionalidades propias del teléfono
(llamadas, mensajes, etc.).
ü Content Provider:
Permite a cualquier aplicación compartir sus datos con las demás aplicaciones
de Android. Por ejemplo, gracias a esta API la información de contactos,
agenda, mensajes, etc. será accesible para otras aplicaciones.
ü View System:
Proporciona un gran número de elementos para poder construir interfaces de
usuario (GUI), como listas, mosaicos, botones, "check-boxes", tamaño
de ventanas, control de las interfaces mediante teclado, etc. Incluye también
algunas vistas estándar para las funcionalidades más frecuentes.
ü Location Manager:
Posibilita a las aplicaciones la obtención de información de localización y
posicionamiento.
ü Notification Manager:
Mediante el cual las aplicaciones, usando un mismo formato, comunican al
usuario eventos que ocurran durante su ejecución: una llamada entrante, un
mensaje recibido, conexión Wi-Fi disponible, ubicación en un punto determinado,
etc. Si llevan asociada alguna acción, en Android denominada Intent, (por
ejemplo, atender una llamada recibida) ésta se activa mediante un simple clic.
ü XMPP Service:
Colección de API para utilizar este protocolo de intercambio de mensajes basado
en XML.
Librerías: La
siguiente capa se corresponde con las librerías utilizadas por Android. Éstas
han sido escritas utilizando C/C++ y proporcionan a Android la mayor parte de
sus capacidades más características. Junto al núcleo basado en Linux, estas
librerías constituyen el corazón de Android.
Entre las librerías más
importantes ubicadas aquí, se pueden encontrar las siguientes:
ü Librería
libc: Incluye todas las cabeceras y funciones según el estándar del lenguaje C.
Todas las demás librerías se definen en este lenguaje.
ü Librería
Surface Manager: Es la encargada de componer los diferentes elementos de
navegación de pantalla. Gestiona también las ventanas pertenecientes a las
distintas aplicaciones activas en cada momento.
ü OpenGL/SL
y SGL: Representan las librerías gráficas y, por tanto, sustentan la capacidad
gráfica de Android. OpenGL/SL maneja gráficos en 3D y permite utilizar, en caso
de que esté disponible en el propio dispositivo móvil, el hardware encargado de
proporcionar gráficos 3D. Por otro lado, SGL proporciona gráficos en 2D, por lo
que será la librería más habitualmente utilizada por la mayoría de las
aplicaciones. Una característica importante de la capacidad gráfica de Android
es que es posible desarrollar aplicaciones que combinen gráficos en 3D y 2D.
ü Librería
Media Libraries: Proporciona todos los códecs necesarios para el contenido
multimedia soportado en Android (vídeo, audio, imágenes estáticas y animadas,
etc.)
ü FreeType:
Permite trabajar de forma rápida y
sencilla con distintos tipos de fuentes.
ü Librería
SSL: Posibilita la utilización de dicho protocolo para establecer
comunicaciones seguras.
ü Librería
SQLite: Creación y gestión de bases de datos relacionales.
ü Librería
WebKit: Proporciona un motor para las aplicaciones de tipo navegador y forma el
núcleo del actual navegador incluido por defecto en la plataforma Android.
Tiempo
de ejecución de Android: Al mismo nivel que las librerías
de Android se sitúa el entorno de ejecución. Éste lo constituyen las
CoreLibraries, que son librerías con multitud de clases Java y la máquina
vistualDalvik.
Núcleo
Linux: Android utiliza el núcleo de Linux 2.6 como una capa de
abstracción para el hardware disponible en los dispositivos móviles. Esta capa
contiene los drivers necesarios para que cualquier componente hardware pueda
ser utilizado mediante las llamadas correspondientes. Siempre que un fabricante
incluye un nuevo elemento de hardware, lo primero que se debe realizar para que
pueda ser utilizado desde Android es crear las librerías de control o drivers
necesarios dentro de este kernel de Linux embebido en el propio Android.
Máquina Virtual Dalvik
Dalkiv
es el nombre de la máquina virtual que utiliza Android (DalvikVM), la cual está
basada en registro, diseñada y escrita por "Dan Bornstein" y algunos
otros ingenieros de Google. En ella podemos encontrar una gran diferencia con
respecto a la máquina virtual Java (JVM), ya que la máquina virtual de Google
no está basada en una pila.
Dalvik.equals
(Java) == false
¿Por
qué " Dalvik "? Éste nombre fue elegido por Bornstein en honor a Dalvik, un pueblo de pescadores de Eyjafjörður
(Islandia), donde vivieron algunos de sus antepasados.
Dalvik VM es un intérprete que sólo
ejecuta los archivos ejecutables con formato .dex (DalvikExecutable). Este
formato está optimizado para el almacenamiento eficiente de la memoria, lo cual
consigue delegando en el kernel la gestión de hilos (multithreading), de
memoria y de procesos.
La
herramienta "dx" incluida en el SDK de Android permite transformar
las clases compiladas (.class) por un compilador de lenguaje Java en formato
.dex.
La
Dalvik VM también ha sido optimizada para correr múltiples instancias con muy
baja huella.
Aplicaciones en Android
Una aplicación Android corre
dentro de su propio proceso Linux, por tanto, una característica fundamental de
Android es que el tiempo y ciclo de vida de una aplicación no está controlado
por la misma aplicación sino que lo determina el sistema a partir de una
combinación de estados como pueden ser qué aplicaciones están funcionando, qué
prioridad tienen para el usuario y cuánta memoria queda disponible en el
sistema.
Componentes
ü Activity: Sin duda es
el componente más habitual de las aplicaciones para Android. Un componente
Activity refleja una determinada actividad llevada a cabo por una aplicación, y
que lleva asociada típicamente una ventana o interfaz de usuario; es importante
señalar que no contempla únicamente el aspecto gráfico, sino que éste forma
parte del componente Activity a través de vistas representadas por clases como
View y sus derivadas. Este componente se implementa mediante la clase de mismo
nombre Activity. La mayoría de las aplicaciones permiten la ejecución de varias
acciones a través de la existencia de una o más pantallas. Por ejemplo,
piénsese en una aplicación de mensajes de texto. En ella, la lista de contactos
se muestra en una ventana. Mediante el despliegue de una segunda ventana, el
usuario puede escribir el mensaje al contacto elegido, y en otra tercera puede
repasar su historial de mensajes enviados o recibidos. Cada una de estas
ventanas debería estar representada a través de un componente Activity, de
forma que navegar de una ventana a otra implica lanzar una actividad o dormir
otra. Android permite controlar por completo el ciclo de vida de los componentes Activity.
ü Intent: Un Intent consiste
básicamente en la voluntad de realizar alguna acción, generalmente asociada a
unos datos. Lanzando un Intent, una aplicación puede delegar el trabajo en
otra, de forma que el sistema se encarga de buscar qué aplicación de entre las
instaladas, es la que puede llevar a cabo la acción solicitada. Por ejemplo,
abrir una URL en algún navegador web, o escribir un correo electrónico desde
algún cliente de correo. Los Intents están incluidos en el AndroidManifest
porque describen dónde y cuándo puede comenzar una actividad. Cuando una
actividad crea un Intent, éste puede tener descriptores de lo que se quiere
hacer. Una vez se está ejecutando la aplicación, Android compara esta
información del Intent con los Intents de cada aplicación, eligiendo el más
adecuado para realizar la operación especificada por el llamante.
ü BroadcastIntent
Receiver: Un
componente BroadcastIntent Receiver se utiliza para lanzar alguna ejecución
dentro de la aplicación actual cuando un determinado evento se produzca
(generalmente, abrir un componente Activity). Por ejemplo, una llamada
entrante o un SMS recibido. Este componente no tiene interfaz de usuario
asociada, pero puede utilizar el API Notification
Manager para avisar al usuario del evento producido a través de la
barra de estado del dispositivo móvil. Este componente se implementa a través
de una clase de nombre BroadcastReceiver. Para que BroadcastIntent Receiver
funcione, no es necesario que la aplicación en cuestión sea la aplicación
activa en el momento de producirse el evento. El sistema lanzará la aplicación
si es necesario cuando el evento monotorizado tenga lugar.
ü Service: Un componente Service
representa una aplicación ejecutada sin interfaz de usuario, y que generalmente
tiene lugar en segundo plano mientras otras aplicaciones (éstas con interfaz)
son las que están activas en la pantalla del dispositivo. Un ejemplo típico de
este componente es un reproductor de música. La interfaz del reproductor
muestra al usuario las distintas canciones disponibles, así como los típicos
botones de reproducción, pausa, volumen, etc. En el momento en el que el
usuario reproduce una canción, ésta se escucha mientras se siguen visualizando
todas las acciones anteriores, e incluso puede ejecutar una aplicación distinta
sin que la música deje de sonar. La interfaz de usuario del reproductor sería
un componente Activity, pero la música en reproducción sería un componente
Service, porque se ejecuta en background.
Este elemento está implementado por la clase de mismo nombre Service.
ü Content
Provider: Con el
componente Content Provider, cualquier aplicación en Android puede almacenar
datos en un fichero, en una base de datos SQLite o en cualquier otro formato
que considere. Además, estos datos pueden ser compartidos entre distintas
aplicaciones. Una clase que implemente el componente Content Provider contendrá una serie de métodos que
permiten almacenar, recuperar, actualizar y compartir los datos de una
aplicación.
Existe una
colección de clases para distintos tipos de gestión de datos en el paquete
android.provider. Además,
cualquier formato adicional que se quiera implementar deberá pertenecer a este
paquete y seguir sus estándares de funcionamiento.
No todas las aplicaciones tienen que
tener los cuatro componentes, pero cualquier aplicación será una
combinación de estos.


No hay comentarios.:
Publicar un comentario