Tema

Post on 23-Jun-2015

866 views 0 download

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 <cif@gsi.dit.upm.es>

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?