Capitulo 4: Componentes Android Elaborado por: Gary Briceño http://gary.pe http://gary.pe 1
http://gary.pe 2
1. COMPONENTES DE LA APLICACIÓN http://gary.pe 3
Componentes Android permite a los desarrolladores la máxima modularidad posible Permite intercambiar funcionalidades entre las aplicaciones Funcionalidad de una aplicación, si esta esta disponible: Otras aplicaciones pueden utilizarla Si ambas se ejecutan en el mismo dispositivo móvil. Se llaman utilizando el Sistema Operativo de Android. http://gary.pe 4
Componentes Tenemos cuatro tipos principales Activities Services Broadcast receivers Content providers Objeto complementario Intent http://gary.pe 5
Activity http://gary.pe 6
Activities Contiene las interfaces gráficas Una aplicación puede tener uno o más Activities Aplicaciones complejas tienen un Activity por cada interfaz de usuario Con más de un Activity, una se selecciona para iniciar la aplicación Deben registrarse en el AndroidManifest.xml http://gary.pe 7
Ejemplo de un Activity public class HelloWorld extends Activity{ } @Override public void oncreate (Bundle savedinstancestate ){ super.oncreate(savedinstancestate); setcontentview(r.layout.activity_hello); } http://gary.pe 8
Services: Se procesan detrás Los servicios no tienen interfaz de usuario Para procesos que se ejecutan por detrás de la aplicación Algunos ejemplos: Cálculos complejos Ejecución de archivos o videos remotos Extraer datos de fuentes remotas Transferencia de datos entre dispositivos Los servicios se crean heredando la clase Service. Los servicios se comunican utilizando AIDL ( Android Service Definition Language ) Deben registrarse en el AndroidManifest.xml http://gary.pe 9
Algunos ejemplos: Broadcast Receiver: Ejemplos Un mensaje de batería baja Notificación de Cambio de zona Cambio en la preferencia del lenguaje Un mensaje de la cámara Ejemplo de alerta entre aplicaciones: Indicación de que la descarga termino Una indicación de que el video esta listo para ejecutarse http://gary.pe 10
Broadcast Receiver: Anuncios y Notificaciones Hereda de la clase BroadcastReceiver Es un componente de comunicación y recibe notificaciones del SO Android Otros componentes de aplicación, o Sus propios componentes Se pueden más de una alerta. Una alerta puede o no iniciar un Activity. También utilizan la clase NotificationManager para alertar al usuario http://gary.pe 11
Content Providers: Manejo de Datos Heredan de la clase ContentProvider Permiten el intercambio de información Representa los datos creados por su aplicación, por otra aplicación o el Sistema Operativo Por ejemplo, El Android phone utiliza un Content Provider para acceder a la base de datos de contacto Los datos pueden estar en un archivo o una SD Card o la BD SQLLite http://gary.pe 12
Content Provider Application Application Activity Activity Application Activity Content Resolver Service Content Resolver Content Provider Content Resolver Data SQLite XML Remote Store http://gary.pe 13
Intent Son mensajes que indican la acción a procesar Main, view, edit, pick, etc La información se envía mediante URI startactivity(new Intent(Intent.VIEW_ACTION, Uri.parse("http://www.fhnw.ch")) startactivity(new Intent(Intent.VIEW_ACTION, Uri.parse("geo:47.480843,8.211293")) startactivity(new Intent(Intent.EDIT_ACTION, Uri.parse("content://contacts/people/1")) http://gary.pe 14
Estructura de Aplicación Activity Services Intent Broadcast Receiver Activity Content Resolver Content Provider Remote Store http://gary.pe 15
ACTIVITY http://gary.pe 16
Ciclo de Vida http://gary.pe 17
Por qué? No colapsar si se recibe una llamada o cambia de aplicación cuando utiliza su aplicación Optimizar el uso de recursos cuando el usuario no está utilizando la aplicación No perder la información de la aplicación si el usuario deja la aplicación y retorna luego No perder la información de la aplicación cuando esta gira de la orientación vertical a la orientación horizontal.
Declaración de la Actividad principal Se puede definir con que Activity iniciara la aplicación, esto se debe realizar en el AndroidManifest.xml El Activity principal se debe declarar dentro de las etiquetas <intent-filter> que incluye la acción MAIN y la categoría LAUNCHER
oncreate()
oncreate() El sistema crea una nueva instancia de la Actividad utilizando oncreate() Debe implementar el método oncreate() para establecer los valores que hagan que su aplicación inicie en forma lógica Este método solo se ejecuta una vez durante la vida de toda la aplicación
Diagrama de ejecución oncreate()
Luego de oncreate() Cuando oncreate() finaliza la ejecución, el sistema llama a onstart() y onresume(). Activity nunca reside en los estados Creado o Iniciado. Técnicamente el Activity se convierte visible cuando se llama al método onstart(), pero onresume() es llamado automaticamente
Destroy de un Activity Mientras que oncreate() es el primer método, ondestroy() es el último Cuando el sistema llama a este método implica que el programa será removido completamente de la memoria Muchas aplicaciones no la necesitan, debido a que las referencias a clases son destruidas en onpause() y onstop() ondestroy() es útil si su Activity incluye procesos en Background u otro tipo de recursos que potencialmente bloqueen el uso de memoria si no son cerrados apropiadamente.
ondestroy() El sistema llama a ondestroy() luego de llamar a onpause() u onstop() En algunos casos se puede llamar a finish() desde oncreate(), que automáticamente llama a ondestroy()
Estados Paused y Resumed
Paused Activity Cuando el sistema llama onpause(), su Activity es parcialmente visible. Comúnmente es una indicación de que el usuario cambio la pantalla y pronto cambiara al estado Stop. Generalmente se puede usar con: Detener animaciones u otras acciones en curso que consumen CPU. Confirmar los cambios no guardados, solo si los usuarios esperan que estos se guarden permanentemente (por ejemplo un email en curso) Liberar los recursos de sistema o cualquier recurso que pueda afectar la vida de la bateria.
Resumed Activity Cuando se cambia del estado Paused al estado Resume, se llama a onresume() El Activity llama a este método cada que entra en primer plano, incluso cuando se crea por primera vez. Se debe implementar onresume() para iniciar los componentes que se liberan durante onpause() e iniciar cualquier otro componente que se requiera.
Paused y Resumed Activity
Stopping y Restarting
Stopping Cuando la aplicación llama a onstop() la aplicación ya no es visible y libera todos los recursos que no son necesarios mientras el usuario no lo esta utilizando. Si es necesario, en onstop() el sistema puede destruir la instancia si requiere memoria. En caso extremo se puede matar la aplicación sin llamar a ondestroy() Se recomienda liberar recursos en onstop(). Cuando se llama a onstop() el objeto reside en memoria y es recargada cuando pasa al estado Resumed.
Start/Restart Cuando un Activity regresa del estado Stop, se llama al método onrestart(). Luego de llamar al método onrestart(), se llama al método onstart(). El método onstart() se llama cada que un Activity se hace visible. No es común que una aplicación utilice el método onrestart().
EJERCICIO http://gary.pe 33
Ejercicio 4: Revisar el Ciclo de Vida de Un Activity Desplegar el proyecto relacionado al ciclo de vida de un Activity proporcionado por el profesor Analizar el orden de trabajo de los estados del ciclo de vida de un Activity http://gary.pe 34
EJERCICIO http://gary.pe 35
Ejercicio 5: Activar o Detener un Servicio Generar un proyecto Android Generar la clase MyService que hereda de Service Implementar dos botones en el activity_main.xml Un primer botón para iniciar el servicio Un segundo botón para detener el servicio Implementar el evento para que se active y detenga un servicio http://gary.pe 36
LABORATORIO http://gary.pe 37
Laboratorio 5 Crear un proyecto Android Generar una Calculadora ( presentación ) Utilizar el elemento Button y EditText Implementar los eventos para los botones Referencia: Utilizar la ejecución de los eventos del ejercicio 5 http://gary.pe 38
http://gary.pe 39