Tema

42
Análisis y Diseño de Software Departamento de Ingeniería de Sistemas Telemáticos http://moodle.dit.upm.es Tema 4.4.2 Intenciones y Servicios Servicios Carlos A. Iglesias <[email protected]>

Transcript of Tema

Page 1: 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]>

Page 2: Tema

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

Page 3: Tema

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]

Page 4: Tema

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

Page 5: Tema

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)

Page 6: Tema

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

Page 7: Tema

Intenciones y Servicios 7

Patrón de Diseño Singleton

● Una clase que tiene sólo un objeto

Page 8: Tema

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

Page 9: Tema

Intenciones y Servicios 9

YambaSingleton (I)

Page 10: Tema

Intenciones y Servicios 10

YambaSingleton (II)

Page 11: Tema

Intenciones y Servicios 11

StatusActivity (I)

Page 12: Tema

Intenciones y Servicios 12

StatusActivity (II)

Page 13: Tema

Intenciones y Servicios 13

StatusActivity (III)

Page 14: Tema

Intenciones y Servicios 14

StatusActivity (IV)

Page 15: Tema

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)

Page 16: Tema

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

Page 17: Tema

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

Page 18: Tema

Intenciones y Servicios 21

Servicios

Usado de fondo

Invocado por otra aplicación, se crea (bind) una conexión permanente con el

servicio

Page 19: Tema

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)

Page 20: Tema

Intenciones y Servicios 23

AndroidManifest.xml

Page 21: Tema

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

Page 22: Tema

Intenciones y Servicios 25

res/menu/menu.xml

Page 23: Tema

Intenciones y Servicios 26

StatusActivity

En res/values/strings.xml

Page 24: Tema

Intenciones y Servicios 27

Probamos...

Page 25: Tema

Intenciones y Servicios 28

Menu

Page 26: Tema

Intenciones y Servicios 29

Comprobar

LogCat View:

Page 27: Tema

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

Page 28: Tema

Intenciones y Servicios 31

UpdaterService2 (I)

Page 29: Tema

Intenciones y Servicios 32

UpdaterService2 (II)

Page 30: Tema

Intenciones y Servicios 33

UpdaterService2 (III)

Page 31: Tema

Intenciones y Servicios 34

Cambio referencias

StatusActivity6.java

AndroidManifest.xml

Page 32: Tema

Intenciones y Servicios 35

Run As...

Page 33: Tema

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

Page 34: Tema

Intenciones y Servicios 37

YambaSingleton2

Page 35: Tema

Intenciones y Servicios 38

UpdaterService3 (I)

Page 36: Tema

Intenciones y Servicios 39

UpdaterService (II)

Page 37: Tema

Intenciones y Servicios 40

UpdaterService (III)

Page 38: Tema

Intenciones y Servicios 41

UpdaterService (IV)

Page 39: Tema

Intenciones y Servicios 42

Probamos...

Si hacemos versiones, cambiamos en StatusActivity y AndroidManifest.xml

Page 40: Tema

Intenciones y Servicios 43

Lo que llevamos hecho...

Page 41: Tema

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

Page 42: Tema

Intenciones y Servicios 45

¿Preguntas?