Análisis y Diseño
      de Software
Tema 4.4.2
Intenciones y Servicios
Servicios

       Carlos A. Iglesias <cif@gsi.dit.upm.es>
      Departamento de Ingeniería de Sistemas Telemáticos
                                  http://moodle.dit.upm.es
Leyenda
Teoría


Ejercicio práctico en el ordenador


Ampliación de conocimientos


Lectura / Vídeo / Podcast


Práctica libre / Experimentación



                    Intenciones y Servicios   2
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   3
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         4
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   5
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     6
Patrón de Diseño Singleton
●   Una clase que tiene sólo un objeto




                          Intenciones y Servicios   7
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            8
YambaSingleton (I)




          Intenciones y Servicios   9
YambaSingleton (II)




          Intenciones y Servicios   10
StatusActivity (I)




          Intenciones y Servicios   11
StatusActivity (II)




          Intenciones y Servicios   12
StatusActivity (III)




           Intenciones y Servicios   13
StatusActivity (IV)




          Intenciones y Servicios   14
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   15
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   19
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      20
Servicios
●      Invocado por otra
       aplicación, se crea
      (bind) una conexión
       permanente con el
             servicio




    Usado de
     fondo




                  Intenciones y Servicios   21
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              22
AndroidManifest.xml




          Intenciones y Servicios   23
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   24
res/menu/menu.xml




         Intenciones y Servicios   25
StatusActivity




       En res/values/strings.xml



         Intenciones y Servicios   26
Probamos...




      Intenciones y Servicios   27
Menu




  Intenciones y Servicios   28
Comprobar


       LogCat View:




     Intenciones y Servicios   29
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   30
UpdaterService2 (I)




          Intenciones y Servicios   31
UpdaterService2 (II)




           Intenciones y Servicios   32
UpdaterService2 (III)




           Intenciones y Servicios   33
Cambio referencias
         AndroidManifest.xml




                    StatusActivity6.java




          Intenciones y Servicios          34
Run As...




     Intenciones y Servicios   35
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   36
YambaSingleton2




        Intenciones y Servicios   37
UpdaterService3 (I)




          Intenciones y Servicios   38
UpdaterService (II)




          Intenciones y Servicios   39
UpdaterService (III)




           Intenciones y Servicios   40
UpdaterService (IV)




          Intenciones y Servicios   41
Probamos...

  Si hacemos versiones, cambiamos en
   StatusActivity y AndroidManifest.xml




            Intenciones y Servicios       42
Lo que llevamos hecho...




             Intenciones y Servicios   43
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   44
¿Preguntas?




      Intenciones y Servicios   45

Tema

  • 1.
    Análisis y Diseño de Software Tema 4.4.2 Intenciones y Servicios Servicios Carlos A. Iglesias <cif@gsi.dit.upm.es> Departamento de Ingeniería de Sistemas Telemáticos http://moodle.dit.upm.es
  • 2.
    Leyenda Teoría Ejercicio práctico enel ordenador Ampliación de conocimientos Lectura / Vídeo / Podcast Práctica libre / Experimentación Intenciones y Servicios 2
  • 3.
    Temario ● 4.1 Introduccióna 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 3
  • 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 4
  • 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 5
  • 6.
    Motivación ● En eltema 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 6
  • 7.
    Patrón de DiseñoSingleton ● Una clase que tiene sólo un objeto Intenciones y Servicios 7
  • 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 8
  • 9.
    YambaSingleton (I) Intenciones y Servicios 9
  • 10.
    YambaSingleton (II) Intenciones y Servicios 10
  • 11.
    StatusActivity (I) Intenciones y Servicios 11
  • 12.
    StatusActivity (II) Intenciones y Servicios 12
  • 13.
    StatusActivity (III) Intenciones y Servicios 13
  • 14.
    StatusActivity (IV) Intenciones y Servicios 14
  • 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 15
  • 16.
    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 19
  • 17.
    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 20
  • 18.
    Servicios ● Invocado por otra aplicación, se crea (bind) una conexión permanente con el servicio Usado de fondo Intenciones y Servicios 21
  • 19.
    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 22
  • 20.
    AndroidManifest.xml Intenciones y Servicios 23
  • 21.
    Lanzar / Pararservicio ● Añadimos opciones para que se pueda lanzar / parar servicio – Editamos res/menu/menu.xml – Actualizamos onOptionsItemSelected de StatusActivity Intenciones y Servicios 24
  • 22.
    res/menu/menu.xml Intenciones y Servicios 25
  • 23.
    StatusActivity En res/values/strings.xml Intenciones y Servicios 26
  • 24.
    Probamos... Intenciones y Servicios 27
  • 25.
    Menu Intencionesy Servicios 28
  • 26.
    Comprobar LogCat View: Intenciones y Servicios 29
  • 27.
    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 30
  • 28.
    UpdaterService2 (I) Intenciones y Servicios 31
  • 29.
    UpdaterService2 (II) Intenciones y Servicios 32
  • 30.
    UpdaterService2 (III) Intenciones y Servicios 33
  • 31.
    Cambio referencias AndroidManifest.xml StatusActivity6.java Intenciones y Servicios 34
  • 32.
    Run As... Intenciones y Servicios 35
  • 33.
    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 36
  • 34.
    YambaSingleton2 Intenciones y Servicios 37
  • 35.
    UpdaterService3 (I) Intenciones y Servicios 38
  • 36.
    UpdaterService (II) Intenciones y Servicios 39
  • 37.
    UpdaterService (III) Intenciones y Servicios 40
  • 38.
    UpdaterService (IV) Intenciones y Servicios 41
  • 39.
    Probamos... Sihacemos versiones, cambiamos en StatusActivity y AndroidManifest.xml Intenciones y Servicios 42
  • 40.
    Lo que llevamoshecho... Intenciones y Servicios 43
  • 41.
    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 44
  • 42.
    ¿Preguntas? Intenciones y Servicios 45