Tema
-
Upload
carlos-a-iglesias -
Category
Technology
-
view
866 -
download
0
Transcript of Tema
Análisis y Diseño de Software
Departamento de Ingeniería de Sistemas Telemáticoshttp://moodle.dit.upm.es
Tema 4.4.2Intenciones y ServiciosServicios
Carlos A. Iglesias <[email protected]>
Intenciones y Servicios 2
Teoría
Ejercicio práctico en el ordenador
Ampliación de conocimientos
Lectura / Vídeo / Podcast
Práctica libre / Experimentación
Leyenda
Intenciones y Servicios 3
Temario
● 4.1 Introducción a Android [Gar10, cap1-2 ]● 4.2 Desarrollo con Android [Gar10, cap3-5]● 4.3 Interfaces de Usuario [Gar10, cap6]● 4.4 Intenciones y Servicios [Gar10, cap7-8]
– 4.4.1 Preferencias, Sistema de Ficheros, Menú de Opciones e Intenciones (cap 7)
– 4.4.2 Servicios (cap 8)● 4.5 Acceso a Datos [Gar10, cap9.10]
Intenciones y Servicios 4
Bibliografía
● Libro de texto: – [Gar10] Learning Android, Marko Gargenta,
O'Reilly, 2010, Cap 8. Disponible en http://ofps.oreilly.com/titles/9781449390501/
● Android Developers– http://developer.android.com/reference/android/app/Service.html
– http://developer.android.com/guide/topics/testing/testing_android.html
Intenciones y Servicios 5
Objetivos
● Aprender el patrón singleton y cómo compartir objetos en una aplicación Android
● Aprender a lanzar (y configurar) procesos de fondo que se lanzan aunque la actividad no esté activa (servicios)
Intenciones y Servicios 6
Motivación
● En el tema anterior refactorizamos getTwitter(), pero es dependiente de una actividad. Parece que no depende de esa pantalla, sino de toda la aplicación– Una opción 'application objects', otra un singleton
● Queremos aprender a tener procesos que se lanzan aunque no lance la aplicación el usuario. P. ej. obtener noticias, o...– Veremos servicios
Intenciones y Servicios 7
Patrón de Diseño Singleton
● Una clase que tiene sólo un objeto
Intenciones y Servicios 8
YambaApplication
● Refactorización:– YambaApplication va a ser responsable de i)
gestionar preferencias y ii) gestionar el objeto twitter• Movemos el campo twitter y el método getTwitter a
YambaApplication– Ahora getTwitter() tendrá que ser público y synchronized
• Movemos la implementación de OnSharedPreferenceChangeListener y el campo twitter a YambaObject
Intenciones y Servicios 9
YambaSingleton (I)
Intenciones y Servicios 10
YambaSingleton (II)
Intenciones y Servicios 11
StatusActivity (I)
Intenciones y Servicios 12
StatusActivity (II)
Intenciones y Servicios 13
StatusActivity (III)
Intenciones y Servicios 14
StatusActivity (IV)
Intenciones y Servicios 15
Comentarios
● En el libro hay una implementación alternativa (extendiendo el objeto Application), pero se recomienda ésta
● El contexto en Android nos permite acceder a los recursos. Para acceder al contexto usamos – getApplication() dentro de una actividad
(recomendado)
Intenciones y Servicios 19
UpdaterService
● Vamos a crear un servicio que guarde en local los 'posts' de twitter para ver algo aunque no tengamos conexión
● Necesitaremos– Crear la clase Java del Servicio– Registrar el servicio en al manifiesto– Lanzar el servicio
Intenciones y Servicios 20
Servicios
● Los servicios permiten– Ejecutar una tarea “de fondo”– Ofrecer una funcionalidad a otras aplicaciones
● Pero...– No se ejecutan en un proceso separado ni en
una hebra, es cosa del programador hacer que sea una hebra
http://developer.android.com/reference/android/app/Service.html
Intenciones y Servicios 21
Servicios
●
Usado de fondo
Invocado por otra aplicación, se crea (bind) una conexión permanente con el
servicio
Intenciones y Servicios 22
UpdaterService
- START_STICKY es el modo 'ejecutado de fondo', debe ser lanzado y parado- START_NOT_STICKY es
lanzado por un cliente (bind)
Intenciones y Servicios 23
AndroidManifest.xml
Intenciones y Servicios 24
Lanzar / Parar servicio
● Añadimos opciones para que se pueda lanzar / parar servicio– Editamos res/menu/menu.xml– Actualizamos onOptionsItemSelected de
StatusActivity
Intenciones y Servicios 25
res/menu/menu.xml
Intenciones y Servicios 26
StatusActivity
En res/values/strings.xml
Intenciones y Servicios 27
Probamos...
Intenciones y Servicios 28
Menu
Intenciones y Servicios 29
Comprobar
LogCat View:
Intenciones y Servicios 30
Mejorando el servicio
● Ahora no hace nada...
● Vamos a hacer que se conecte 'cada rato', y no haga nada el resto del tiempo (Thread.sleep())
●→ Segunda versión del servicio– UpdaterService2 / StatusActivity6
Intenciones y Servicios 31
UpdaterService2 (I)
Intenciones y Servicios 32
UpdaterService2 (II)
Intenciones y Servicios 33
UpdaterService2 (III)
Intenciones y Servicios 34
Cambio referencias
StatusActivity6.java
AndroidManifest.xml
Intenciones y Servicios 35
Run As...
Intenciones y Servicios 36
Más cambios
● Vamos a poner un “flag” en YambaSingleton para que sepamos si el servicio está lanzado o no
● Y vamos a usar YambaSingleton para conectarnos a Twitter desde el Servicio, recuperar los tweets de nuestros amigos, y así poder mostrarlos si no hay conexión
Intenciones y Servicios 37
YambaSingleton2
Intenciones y Servicios 38
UpdaterService3 (I)
Intenciones y Servicios 39
UpdaterService (II)
Intenciones y Servicios 40
UpdaterService (III)
Intenciones y Servicios 41
UpdaterService (IV)
Intenciones y Servicios 42
Probamos...
Si hacemos versiones, cambiamos en StatusActivity y AndroidManifest.xml
Intenciones y Servicios 43
Lo que llevamos hecho...
Intenciones y Servicios 44
Resumen
● En este tema hemos aprendido a– El patrón de diseño Singleton, y cómo usarlo
en Android– Qué son y cómo usar servicios
• Lanzar hebras desde servicios
– Modificar el menú para incluir más opciones
Intenciones y Servicios 45
¿Preguntas?