5 Aplicaciones Móviles
5.3 Componentes de las Aplicaciones
Los componentes de aplicación son la esencia de una aplicación Android. Cada componente es un punto distinto por el cual el sistema puede ingresar a la aplicación. No todos los componentes son puntos de entrada para el usuario y algunos tienen dependencias entre sí, pero cada uno existe como una entidad, juegan un rol específico; cada uno de ellos ayuda a definir el comportamiento general de la aplicación.
Existen 4 tipos diferentes de componentes de aplicación. Cada tipo sirve a un propósito diferente y tiene su propio ciclo de vida que define como un componente es creado y destruido.
Los 4 tipos de componentes de aplicación son:
● Activity/Fragment. Representa una única pantalla con una interfaz de usuario. Por ejemplo, una aplicación de email puede tener una actividad que muestre la lista de nuevos emails, otra actividad para componer un email, y otra actividad para leer emails. Aunque las actividades trabajan juntas para formar una experiencia de usuario cohesiva en la aplicación de email, cada actividad es independiente de las demás. Por esta razón, una aplicación diferente puede iniciar cualquiera de estas actividades (si la aplicación de email lo permite). Por ejemplo la aplicación de la cámara puede iniciar la actividad que compone un email, para que el usuario pueda compartir su foto. En versiones posteriores a 3.0 de Android, se introdujo el concepto de Fragment, el cual debe ser considerado como un componente de una Actividad, con su ciclo de vida y con la particularidad que pueden realizar invocaciones entre componentes.
● Service. Es un componente que se ejecuta en segundo plano para realizar operaciones de larga ejecución o para realizar trabajos para procesos remotos. Un servicio no provee una interfaz de usuario. Por ejemplo, un servicio puede reproducir música en segundo plano mientras el usuario se encuentra en una aplicación diferente, o puede recuperar datos desde la red sin bloquear la interacción del
usuario con una actividad. Otro componente, como una actividad, puede inicializar el servicio y dejarlo en ejecución o enlazarlo para interactuar con el.
● BroadcastReceiver. Es un componente que responde a mensajes de difusión en todo el sistema. Muchas emisiones (broadcast) se originan en el sistema; por ejemplo, una emisión anuncia que la pantalla se apagó, la batería está baja de energía, o una foto fue capturada. Las aplicaciones también pueden iniciar las emisiones- por ejemplo, para comunicar a otras aplicaciones que cierta información fue descargada al dispositivo y está disponible para ser usada. Aunque los broadcast receivers no muestran una interfaz de usuario, pueden crear una barra de estado de notificación para alertar al usuario cuando el evento de emisión ocurre. Comúnmente un broadcast receiver es solo un “portal” hacia otros componentes y está desarrollado para requerir una mínima cantidad de trabajo.
● ContentProvider. Gestiona un conjunto compartido de datos de aplicación. Se pueden almacenar los datos en el sistema de archivos, en una base de datos, en la web, o en cualquier lugar persistente de almacenamiento que la aplicación pueda acceder. A través del content provider, otras aplicaciones pueden acceder y hasta modificar los datos (si el content provider lo permite). Por ejemplo, el sistema Android provee un content provider que gestiona la información de los contactos del usuario. Por lo tanto, cualquier aplicación con los permisos necesarios podrá gestionar, a través de este contentProvider, la lectura o escritura de la información de un contacto en particular. Además los content provider, son útiles para leer y escribir datos que son privados a la aplicación.
Todos estos componentes deben ser definidos en un archivo que toda aplicación Android debe especificar llamado "AndroidManifest.xml". El "Android Manifest" contiene información esencial necesaria sobre el sistema Android, información que además es mandatoria antes de poder ejecutar cualquier línea de código. Entre otras cosas el "Android Manifest" contiene lo siguiente:
● Nombre del paquete Java. Este nombre sirve como un identificador único de la aplicación.
● Describe todos los componentes de la aplicación (Actividades, Servicios, "Broadcast receivers" y "Content providers"). Nombre de cada clase y el componente que
implementa. De esta forma el sistema Android sabe que componentes hay y bajo qué condiciones se ejecutarán.
● Android Manifest también determina qué procesos contendrán los componentes de la aplicación.
● Determina que permiso tiene la aplicación para acceder a partes protegidas del API e interactuar con otras aplicaciones.
● También determina qué permisos tienen otros para acceder a los componentes de la aplicación.
● Lista las clases de instrumentación que proporcionan perfiles y otra información de ejecución. Esta declaración solo está presente en desarrollo y pruebas, cuando la aplicación es publicada se elimina.
● Declara el nivel mínimo del API Android.
Un aspecto único del diseño del sistema Android es que cualquier aplicación puede iniciar un componente de otra aplicación. Por ejemplo, si el usuario desea capturar una foto con la cámara del dispositivo, existe una posibilidad de que otra aplicación haga eso y que nuestra aplicación lo reuse, en vez de desarrollar una actividad para capturar una foto. La aplicación no necesita incorporar o enlazar el código de la aplicación de la cámara. En su lugar, la aplicación simplemente puede iniciar la actividad en la aplicación de la cámara que captura la foto. Cuando se completa, la foto es retornada por un evento a la aplicación que la solicitó para su uso. El usuario ve como que la cámara es parte de su aplicación cuando en realidad se hizo uso de un componente.
Cuando el sistema inicia un componente, se inicia el proceso de esa aplicación (si no está en ejecución en ese momento) e instancia las clases necesarias. Por ejemplo, si la aplicación inicia la actividad en la aplicación de la cámara que captura la foto, esa actividad se ejecuta en el proceso que pertenece a la aplicación de la cámara, no en el proceso de la aplicación que lo llama. Por este motivo, a diferencia de las aplicaciones en la mayoría de otros sistemas, las aplicaciones Android no poseen un solo punto de entrada (por ejemplo, no existe una función main()).
Dado que el sistema ejecuta cada aplicación en un proceso diferente con permisos de archivos que restringen el acceso a otras aplicaciones, la aplicación no puede directamente activar un componente de otra aplicación. Esto se hace por medio del SO Android. Entonces, para activar un componente de otra aplicación, se debe enviar un
mensaje al sistema que especifique el intento(intent) de iniciar un componente en particular. Luego el sistema activa el componente. A continuación (Figura 16) se muestra el ciclo de vida de un componente y sus respectivos métodos que pueden ser sobrescritos para agregar la funcionalidad deseada.