Una vez instalado todo lo necesario y antes de programar el típico "Hola mundo", vamos a ver algunos conceptos que debemos conocer. Hay una serie de objetos definidos en el Android SDK con los que debemos familiarizarnos:
- Activities. Es una pantalla de interfaz de usuario. Las aplicaciones pueden definir una o más activities para manejar las diferentes fases de un programa. Cada actividad es responsable de guardar su propio estado, para poder ser restaurado posteriormente, como parte del ciclo de vida de la aplicación. Podemos equiparar una activity a cada ventana que tiene una aplicación.
Ejemplos de Activities.
- Services. Es una tarea que se ejecuta en segundo plano, sin la interacción directa del usuario, similar a un demonio Unix. Por ejemplo, si consideramos un reproductor de música, la música puede comenzar con una activity, pero si queremos que continúe sonando incluso cuando un usuario pase a un programa diferente, el código debe ir en un service. Más tarde otra activity se puede unir a este service y cambiar de canción o pararla. Android viene con una serie de servicios integrados, junto con la API para acceder a ellos.
- Intents. Un intent es un mecanismo para describir una acción específica. Son mensajes o peticiones que se envían entre los distintos componentes de una aplicación o entre distintas aplicaciones. Mediante un intent se puede mostrar una actividad desde otra, iniciar un servicio, iniciar otra aplicación. Su uso más común es unir los componentes de las aplicaciones. En Android casi todo lo que pasa es a través de intents, por lo que hay muchas oportunidades de reemplazar o reutilizar componentes. Por ejemplo, hay un intent para enviar un email, si tu aplicación necesita enviar un mail, puedes invocar este intent. O si estás escribiendo una aplicación para administrar tus correos electrónicos, puedes registrar una activity para manejar este intent y reemplazar el programa standard de correo electrónico. La próxima vez que alguien intente enviar un correo electrónico tendrá la opción de utilizar tu programa en lugar del programa predeterminado.
- Content providers. Es un conjunto de datos envuelto en una API personalizada. Se trata de un mecanismo definido en Android para compartir datos entre aplicaciones. Así podemos compartir determinados datos de nuestra aplicación sin mostrar detalles de su almacenamiento interno, estructura, etc. Por ejemplo, Google proporciona un content provider para los contactos. Toda la información de los contactos, nombres, direcciones, números de teléfono, etc, pueden ser compartidos por cualquier aplicación que quiera usarlos.
- View. Son los componentes básicos con los que se construye la interfaz gráfica. Android nos ofrece una gran cantidad de controles básicos como cuadros de texto, botones, listas desplegables, etc. Se puede extender la funcionalidad de estos controles básicos o crear nuestros propios controles personalizados.
- Broadcast receiver. Componente destinado a detectar y reaccionar ante determinados eventos generados por el sistema (batería baja, mensaje recibido, etc,) o por otras aplicaciones. Los eventos o mensajes no son dirigidos a una aplicación concreta sino a quien quiera escucharlo.
- Widget. Elementos visuales que pueden colocarse en la pantalla principal o home.
Ejemplos de Widgets.
CICLO DE VIDA DE UNA APLICACIÓN
Una aplicación es una o más actividades (activities) más un proceso Linux para contenerlas. Cada actividad tiene su propio ciclo de vida. En Android, una aplicación puede estar "viva" aunque su proceso haya muerto. Dicho de otra forma, el ciclo de vida de una actividad no está vinculada con el ciclo de vida del proceso. Los procesos son sólo contenedores desechables para las actividades. Esto es probablemente diferente de cualquier otro sistema con el que estemos familiarizados.
Durante el ciclo de vida de un programa, cada actividad puede estar en uno de varios estados posibles. Los desarrolladores no tienen el control sobre el estado en el que está el programa, ya que está gestionado por el sistema. Se pueden sobreescribir una serie de métodos, pero el sistema decide llamarlos en el momento adecuado:
- onCreate(Bundle). Se llama cuando la actividad se inicia por primera vez. Se puede utilizar para llevar a cabo tareas de inicialización, como crear la interfaz de usuario. onCreate() toma un parámetro que puede ser nulo o alguna información de estado previamente guardada por el método onSaveInstanceState().
- onStart(). Indica que la actividad se va a mostrar al usuario.
- onResume(). Es llamado cuando la actividad puede empezar a interactuar con el usuario. Buen lugar para comenzar animaciones y música.
- onPause(). Se ejecuta cuando la actividad está a punto de entrar a un segundo plano, normalmente debido a que otra actividad se ha puesto en marcha. Aquí se deberían guardar el estado persistente del programa, como por ejemplo un registro de la base de datos que está siendo editado.
- onStop(). Es llamado cuando la actividad no es visible para el usuario y no será necesaria por un tiempo. Si la memoria es ajustada, onStop() puede no ser llamado, el sistema simplemente terminará su proceso.
- onRestart(). Si este método es llamado, indica que la actividad se vuelve a mostrar al usuario desde un estado de detención.
- onDestroy(). Se llama justo antes de que la actividad sea destruida. Si la memoria es limitada, este método no será llamado, el sistema finalizará el proceso.
- onSaveInstanceState(Bundle). Este método será llamado para permitir a la actividad salvar, por ejemplo, el estado, tal como la posición del cursor dentro de un campo de texto. Normalmente no deberá ser sobreescrito, ya que la implementación por defecto guarda el estado de todas las interfaces de control automáticamente.
- onRestoreInstanceState(Bundle). Este método es llamado cuando la actividad se reinicializa desde un estado previamente guardado por el método onSaveInstanceState(). La implementación por defecto restaura el estado de la interfaz de usuario.
Imagen sacada del libro Hello Android.
Las actividades que no están en primer plano pueden ser paradas o el proceso Linux que las alberga puede ser matado en cualquier momento para dar cabida a nuevas actividades. Es importante diseñar nuestra aplicación con esto en mente desde el principio. En ocasiones el método onPause() puede ser el último método llamado en la actividad, por tanto, es donde se debería guardar cualquier dato que deseamos conservar para la próxima vez.
Para este artículo se ha utilizado entre otras fuentes el libro Hello Android de Ed Burnette, libro muy recomendable para aprender programación en Android.
Article originally appeared on javaHispano (http://www.javahispano.org/).
See website for complete article licensing information.