4.4. No todo son actividades

Publicado por P. Ruiz en

Hasta ahora, nos habíamos centrado en las actividades, porque son los elementos encargados de crear la interfaz de la aplicación y, por lo tanto, la parte más evidente y fácil de comprender de la misma. Sin embargo, existen otros tipos de componentes en cualquier aplicación Android:

  • Objetos de vista (views): Son los elementos con los que se crea la interfaz de la aplicación (lo que ve el usuario). Nos ofrece una gran variedad de controles, como botones, cuadros de texto, listas, etc., e incluso podemos crear los nuestros propios a partir de los que ya existen. Cada uno de estos objetos sabrá cómo dibujarse a él mismo en la pantalla.

  • Si ya has programado con antelación en otros lenguajes modernos, como Java, probablemente ya conozcas objetos de este tipo. Si no es así, tendrás la oportunidad de acercarte a ellos en el próximo capítulo.

  • Intents (intenciones): Son mensajes enviados entre diferentes objetos del sistema. Pueden provocar la ejecución de una actividad, que se inicie o se detenga un servicio o simplemente emitir un mensaje para los demás objetos. Por ejemplo, cuando cambiamos la orientación de nuestro dispositivo, insertamos una tarjeta de memoria, recibimos una llamada o un SMS, o elegimos una aplicación en el menú del sistema, se produce un mensaje destinado al objeto que debe responder ante esa incidencia.

  • Las intenciones pueden ser de dos tipos:

    • Implícitas: El programa que provoca la intención sólo indica el tipo de receptor. Por ejemplo, una actividad envía una intención para que se muestre en pantalla una imagen en particular. Si tenemos instalado más de un programa que pueda realizar esta acción, el sistema operativo podrá utilizar la aplicación predeterminada o mostrar en pantalla las diferentes opciones, para que el usuario elija su preferida.

    • Explícitas. El programa que provoca la intención especifica el componente particular que debe recibirla.

    Es importante saber que las intenciones son asíncronas, lo que significa que el programa que las envía no tiene que esperar a que se completen para seguir con el resto de su tarea.

    En Android, podemos crear actividades que respondan a determinadas intenciones (como hacer una captura de la pantalla cuando agitemos el dispositivo) o definir intenciones que lancen actividades ante determinadas situaciones (como avisar de que la batería dispone de poca carga).


    Aunque de momento no vamos a utilizarla, los proveedores de contenido basan su interfaz en el uso de cuatro métodos básicos: insert(), update(), delete() y query().

    Y, como su manejo es parecido al de una base de datos estándar, son fáciles de implementar en nuestros programas.

    En Android, un servicio puede constituirse como una tarea independiente o formar parte de una aplicación.

    Será una tarea independiente cuando realice un trabajo conceptualmente separado de la aplicación que lo crea. Sin embargo, debes tener en cuenta que un servicio que se ejecuta de manera independiente consume más recursos que si lo hace dentro de una aplicación.

  • Content providers (proveedores de contenido): De forma predeterminada, en Android, los datos que maneja una aplicación permanecen aislados de las otras aplicaciones que se ejecuten en el sistema. Una forma sencilla de que una aplicación le pase a otra una pequeña cantidad de información es a través de una intención (intent). Sin embargo, cuando se necesite compartir mayores cantidades de información, habrá que recurrir a la creación de un proveedor de contenido. Éste puede estar basado en un archivo del sistema, en una base de datos SQLite, o en cualquier otro método de almacenamiento.

  • Una característica fundamental de los proveedores de contenido es que utilizan métodos de almacenamiento persistente (los datos pueden estar ahí de una sesión de trabajo a la siguiente).

    La información compartida podrá ser leída o, incluso modificada por las aplicaciones destinatarias, si la aplicación que lo ha creado otorga permiso. No obstante, la aplicación que comparte los datos tiene todo el control sobre los datos y sobre la forma en la que son accedidos.

    Como consecuencia de todo lo anterior, los proveedores de contenido facilitan la separación entre el almacenamiento y el programa que gestiona los datos. Además, permite fragmentar la funcionalidad en diferentes partes.

    Dada su potencia y versatilidad, en Android, los proveedores de contenidos se utilizan continuamente. Así, disponemos de un proveedor de contenidos para los valores de configuración del sistema, otro para los contenidos multimedia, e incluso para los contactos del usuario. Esto permite que, por ejemplo, el usuario instale un programa para administrar sus contactos distinta de la predeterminada, pero que siga utilizando los mismos datos.

  • Services (servicios): Los servicios son programas que se ejecutan en segundo plano y que pueden depender, o no, de otra actividad. Una de sus características más importante es que no disponen de interfaz de usuario. Además, su duración en el tiempo suele ser mayor que el de los elementos anteriores y atienden tareas que se desarrollan de manera independiente a la actividad del usuario. Esto proporciona un mecanismo que nos permite asegurarnos de que una determinada actividad se realiza durante un periodo en particular, de forma independiente de lo que ocurra en la pantalla. Por ejemplo, el usuario puede estar navegando por Internet (que es la actividad a la que le dedica su atención, la que tiene el foco), mientras escucha música (un servicio que se ejecuta en segundo plano) y que, en ese momento, reciba una llamada de teléfono entrante (se activará otro servicio que estaba vigilando para cuando se recibieran llamadas).

  • El ciclo de vida de un servicio es mucho más sencillo que el de una actividad, pero como ocurría con aquellas, está controlado en gran medida por quien lo programe. Como consecuencia de esto, es necesario que seamos conscientes de no mantener en ejecución servicios innecesarios que consuman memoria, capacidad de proceso (que también redundará en una menor duración de la batería.


  • Broadcast receivers (receptores de difusión): Son componentes que permanecen latentes a la espera de que el sistema operativo active una notificación de difusión a la que están suscritos. No disponen de interfaz (por lo que no pueden verse en pantalla) ni se ejecutan de forma activa. Sólo se ponen en marcha cuando se produce un aviso del sistema y, en ese momento podrán iniciar el servicio o la actividad que tengan prevista.


  • Un ejemplo de notificación del sistema puede ocurrir cuando el nivel de la batería está críticamente bajo. Si una aplicación ha definido un receptor de difusión para este evento, podrá actuar en consecuencia cuando se produzca. Por ejemplo, evitando la pérdida de información cuando se apague el terminal.

    Android transmite eventos de manera continua informando de multitud de situaciones y, por cada uno de ellos podrían existir un número indeterminado de receptores.

    Una aplicación también puede lanzar una notificación al resto del sistema. Así, podemos programar diferentes componentes que se comuniquen entre sí de forma asíncrona y colaborando para ofrecer un mismo servicio. Además, las notificaciones son el mejor método para avisar al usuario de que algo necesita su atención.

    En realidad, podríamos pensar en estos elementos como una variedad de las intenciones (intents), que vimos más arriba.

  • Widget: Son programas que tienen la facultad de ejecutarse sobre el escritorio (la pantalla principal) de Android. Normalmente, su interfaz puede cambiar para mostrar una determinada información o estado al usuario (como el nivel de la batería, la hora, etc).


Anterior

Contenido

Siguiente