Toda aplicación Android esta constituida por 4 bloques, no
necesariamente deben estar todos en la misma. Estos bloques son:
- - Actividad (Activity).
- - Receptor de Intenciones (IntentReceiver).
- - Servicios (Services).
- - Proveedores de contenido (ContentProvider).
Como no son obligatorios, los que usemos deben estar definidos en un
archivo llamado AndroidManifest.xml. Este es un archivo XML en el que declaras
los componentes de tu aplicación, sus capacidades y sus requerimientos.
Actividad (Activity).
Una actividad es el bloque más usado en las aplicaciones Android.
Generalmente, una actividad es una pantalla individual en la aplicación. Cada actividad
se implementa como una clase que hereda de Activity, lo que hará que tu clase despliegue una
UI compuesta de Views y responda a eventos. Lo común es que una aplicación
consista de múltiples pantallas. Por ejemplo, una aplicación de mensajería
podría usar una pantalla para mostrar el listado de contactos y en una segunda
pantalla para escribir el mensaje al contacto seleccionado; y otras pantallas
para ver cambiar la configuración. Cada una de estas pantallas debe ser
implementada como una Activity. La navegación entre las pantallas se hace
iniciando una nueva Activity. En algunos casos, una Activity podría devolver un
valor a la Activity anterior, por ejemplo la Actividad#1 podría permitir
seleccionar una foto y esta foto sería devuelta a la Activity que hizo el
llamado a Actividad#1.
Cuando una pantalla es abierta, la previa es puesta en pausa y agregada
al History Stack. Posteriormente, el usuario puede navegar hacia previas
pantallas invocando las pantallas almacenadas en el History Stack. Las
pantallas también pueden ser removidas del History Stack cuando resulta
inapropiado su almacenamiento. Android mantiene un History Stack por cada una
de las aplicaciones que son activadas desde la Home Screen.
Receptor de Intenciones (IntentReceiver).
Antes de poder explicar que es el receptor de intenciones o
IntentReceiver debemos conocer que son intenciones.
Android usa una clase especial llamada Intent para moverse de una
pantalla a otra. Un Intent describe lo que una aplicación desea hacer. Las dos
partes más importantes de la estructura de datos de un Intent son la acción y
los datos sobre los cuales se actuará. Los valores típicos para la acción son MAIN,
VIEW, PICK, EDIT, etc. Los datos son expresados como una URI. Por ejemplo, para
ver la información de contacto de una persona podría ser necesario crear un Intent
con la acción VIEW y los datos definidos como una URI que representa a esa
persona.
Una clase relacionada con Intent es IntentFilter. Si bien un Intent es
una solicitud para realizar algo, un IntentFilter es una descripción de lo que
intenta hacer una Activity (o de lo que intenta recibir). Una Activity que es
capaz de desplegar la información de contacto de una persona podría declarar
que sabe cómo tratar la acción VIEW cuando es aplicada a los datos que
representan a la persona. Una Activity declara sus IntentFilter’s en el archivo
"AndroidManifest.xml".
La navegación de pantalla a pantalla es ejecutada a través de la
resolución de intentos. Para navegar hacia adelante, una Activity llama startActivity(myIntent).
Entonces, el sistema examina todos los IntentFilter’s que existen para las
aplicaciones instaladas y toma aquellas Activity cuyos IntentFilter mejor se
acercan a myIntent. La nueva Activity es informada del Intent, lo que causa que
sea activada. El proceso de resolución de Intent ocurre en tiempo de ejecución
cuando startActivity es llamado, lo cual tiene dos beneficios claves:
-
Una Activity puede reutilizar funcionalidades de otras componentes con
sólo hacer un una solicitud en la forma de Intent.
-
Una Activity puede ser reemplazada en cualquier momento por una nueva Activity
que tenga un IntentFilter equivalente.
Por lo tanto, tú puedes utilizar un IntentReceiver cuando quieras
programar tu aplicación para que se ejecute como respuesta a un evento. Por
ejemplo, cuando recibes una llamada, cuando la red de datos está disponible o
cuando es media noche. Los IntentReceiver’s no despliegan UI, sin embargo ellos
podrían utilizar el NotificationManager para avisar al usuario que algo
interesante está pasando. Los IntentReceiver’s son registrados en el archivo
"AndroidManifest.xml", pero también pueden ser registrados
programáticamente con el uso de Context.registerReceiver(). Tu aplicación no
requiere estar corriendo para que sus IntentReceiver’s puedan ser llamados. Si
tu aplicación no estuviera corriendo, el sistema la puede activar cuando uno de
sus IntentReceiver’s sea disparado. Las aplicaciones también pueden transmitir
sus propios Intents a otras aplicaciones a través de Context.broadcastIntent().
Servicios (Services).
Un Service es una aplicación que se mantiene activada por un largo
tiempo y no despliega una UI. Un ejemplo es un programa que reproduce archivos
mp3 desde una lista de música, mientras el usuario realiza otras actividades.
En este caso, el programa podría iniciar un servicio con Context.startService()
y de esa forma reproducir la música sin necesidad de usar la pantalla. El
sistema mantendrá el servicio de reproducción de música corriendo hasta que
finalice. Si quieres aprender más sobre la prioridad que es dada a los
servicios por el sistema, lee "Ciclo de vida de una aplicación Android".
Es posible conectarse a un Service (y activarlo si no estuviera corriendo)
haciendo uso del método Context.bindService(). Una vez que la aplicación está
conectada al servicio, la comunicación entre tu aplicación y el servicio se
realiza a través de la interfaz que el servicio expone. Para nuestro ejemplo
del reproductor mp3, está interfaz podría permitir hacer pausa o saltar a una
nueva canción.
Proveedores de contenido (ContentProvider).
Las aplicaciones puedes almacenar sus datos en archivos, una base de
datos SQLite o cualquier otro mecanismo. Sin embargo, un ContentProvider es de
utilidad cuando los datos de tu aplicación deben ser compartidos con otras
aplicaciones. Un ContentProvider es una clase que implementa un conjunto
estándar de métodos para que otras aplicaciones almacenen o recuperen el tipo
de datos que el ContentProvider manipula.
No hay comentarios:
Publicar un comentario