miércoles, 11 de septiembre de 2013

Conceptos básicos de Android

Hay 4 bloques/componentes que debemos conocer y que pueden estar presentes, a la vez, en una aplicación Android:

1. Actividad

Cada actividad esta implementada como una simple clase Java que extiende (hereda) de la clase Activity de Android. Una actividad se encargará de mostrar una interfaz de usuario o pantalla gráfica, compuesta de vistas (cada unos de los elementos de la pantalla), y de tratar los eventos sobre estas vistas. Por cada pantalla que necesite una aplicación definiremos una actividad. Por ejemplo una actividad para listar contactos, otra para ver el detalle del contacto elegido y otra para enviar mensajes.
Cuando volvemos atrás en la aplicación, la interfaz es pausada y puesta en una pila. Con lo estamos devolviendo el control a la actividad que controlaba la anterior interfaz. Por lo tanto podemos definir las actividades como los controladores en la arquitectura MVC que utiliza Android.
En el fichero AndroidManifest.xml deberemos especificar todas las actividades de la aplicación, y cual va a ser la que se iniciará con la aplicación.

2. Vista

Las vistas son los componentes básicos que proporciona Android para definir la interfaz gráfica de la aplicación. Estos pueden ser botones, cuadros de texto, listas... Cada uno de estos elementos es una subclase de View. Y por lo tanto podemos crear nuestras propias vista o modificar el comportamiento de las existentes mediante la herencia de la determinada vista.

3. Intent 

Android utiliza unos objetos especiales para que una aplicación pase de una pantalla a otra. Estos objetos, llamados 'intents', describen lo que una aplicación desea hacer. Evidentemente no solo sirve para lanzar actividades, sino que también podremos lanzar servicios a través de ellos. Y sus dos partes más importantes de su estructura son la el tipo de acción que desea hacer y el tipo de datos que necesitan para dicha acción.
Android tiene dos formas de usar los 'intents':
- Explicitamente: Donde proporcionaremos al intent la clase exacta a ejecutar. O lo que es lo mismo indicaremos la actividad que controla a la siguiente pantalla que queremos mostrar.

 Intent i = new Intent(getApplicationContext(),  
             RegisterActivity.class);  
 startActivity(i);

- Implicitamente: No indicamos un componente exacto a ejecutar si no que indicamos al sistema la información necesaria para que él elija  el componente adecuado que realizará la acción.
Por ejemplo si queremos abrir el navegador en una determinada dirección necesitamos una acción de tipo VIEW y como datos deberemos especificar la URL.

 new Intent(android.content.Intent.VIEW_ACTION, 
             ContentURI.create("http://www.google.com"));  

Si queremos ver la lista completa de acciones podemos ver el siguiente documento: http://developer.android.com/reference/android/content/Intent.html

Como hemos mencionado, navegar de una pantalla de la aplicación a otra se consigue por medio de los 'intents'. Si lanzamos un 'intent' de manera implicita, el sistema busca un 'intent-filter' (definido en el fichero AndroidManifest.xml) en las aplicaciones instaladas y elige la actividad cuyo 'intent-filter' (clase IntentFilter) mejor se ajuste con el 'intent' lanzado.

4. Receptor de intents

Es posible responder a eventos externos desde dentro de tu aplicación mediante el receptor de 'intents' (clase IntentReceiver). Por ejemplo reaccionar ante llamada telefónica, cuando la red está disponible...
Estos receptores no necesitan de una interfaz gráfica, al igual que los servicios (que veremos a continuación). Estos se pueden registrar de dos maneras:
- Especificando en el AndroidManifest.xml.
- Desde el propio código fuente de la aplicación mediante Context.registerReceiver()
Sin embargo un 'intent' no tiene que ir destinado a un componente en concreto, sino que las aplicaciones pueden enviarlos para que quien escuche reaccione. A esto se le llama envío 'broadcast'. Ya que no va dirigido a nadie en concreto.

5. Servicio

Un servicio es un componente que se ejecuta de forma automática, sin interacción con el usuario. Son utilizados para realizar tareas repetitivas y potencialmente de larga duración como descargas de internet, comprobaciones de nuevos datos...
Los servicios se ejecutan con una prioridad mayor que las actividades inactivas y por lo tanto es menos común que Android los detenga. Aunque se pueden configurar para que se reinicien si se da el caso que android los detenga o termine por falta de recursos.
Por defecto un servicio se ejecuta en el mismo proceso que la aplicación. Pero podemos hacer que un servicio se ejecute de manera asíncrona en un segundo plano, si por ejemplo necesitamos que realize una tarea costosa. De esta manera el servicio se ejecutará y terminará de manera independiente al proceso principal de la aplicación.
Un ejemplo de servicio lo tendríamos en un reproductor de música. Este tiene sus actividades para poder navegar por la lista de canciones y por los detalles. Pero la reproducción de música no necesita de ninguna actividad ya que continuará reproduciéndose incluso aunque se esté navegando entre las pantallas de las citadas actividades. Por lo tanto la aplicación habrá lanzado un servicio que es el encargado de reproducir la música. Y una actividad podrá comunicarse con él mediante un interfaz (interface) proporcionada para poder parar, rebobinar...

6. Proveedor de contenido

Las aplicaciones Android pueden almacenar datos en bases de datos SQLite, ficheros de preferencias, ficheros de texto... Pero es posible que queramos que dicho datos almacenados estén disponibles para ser compartidos con otras aplicaciones. Y para ello están los proveedores de contenido. Ya que son la única manera de compartir datos entre aplicaciones, al no haber un área de almacenamiento común a la que todos los paquetes de Android pueden acceder (por seguridad).
Los proveedores de contenido son clases que implementan métodos que permiten a otras aplicaciones almacenar y acceder a tipos de datos controlados por dicho proveedor de contenido. Podemos crear nuestros proveedores de contenidos (una subclase ContentProvider) aunque Android incluye un número de proveedores de contenido para los tipos de datos más comunes (audio, vídeo, imágenes, información de contacto personal...). Y para poder acceder ellos necesitamos enviar peticiones teniendo en cuenta que para el acceso a ciertos datos necesitamos tener permisos que deberán ser especificados en el manifiesto (AndroidManifest.xml).



Una vez se tenga decidido que componentes necesita la aplicación, se deben listar en el fichero AndroidManifest.xml. Donde declararemos los componentes y sus especificaciones.


Entradas relacionadas

El archivo AndroidManifest.xml

No hay comentarios:

Publicar un comentario