SlideShare une entreprise Scribd logo
1  sur  60
Télécharger pour lire hors ligne
Análisis y Diseño
      de Software

Interfaces de Usuario
Hebras e Internacionalización.
Interfaz Yamba
      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



                    Interfaces de Usuario   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.3.1 Ejemplo SobreTeleco
  – 4.3.2 Layouts y Views
  – 4.3.3 Widgets y Trazas. Interfaz del proyecto Yamba
  – 4.3.4. Hebras e internacionalización. Interfaz Yamba.
● 4.4 Intenciones y Servicios [Gar10, cap7-8]
● 4.5 Acceso   a Datos [Gar10, cap9]

                                 Interfaces de Usuario      3
Bibliografía
●   Libro de texto:
    – [Gar10] Learning Android, Marko Gargenta,
        O'Reilly, 2010. Disponible en
        http://ofps.oreilly.com/titles/9781449390501/
    –   Capítulos 6
    –   http://www.youtube.com/watch?v=-P1eiRy-klk&list=PLE08A97D36D5A255F&index=10&feature=plpp_vid
    –   http://www.youtube.com/watch?
        v=CzKYgi80yUw&list=PLE08A97D36D5A255F&index=11&feature=plpp_video

●   Android Developers
    –   http://developer.android.com/guide/topics/fundamentals.html
    –   http://developer.android.com/guide/topics/ui/index.html
                                                   Interfaces de Usuario                         4
Objetivos
●    Entender cómo funcionan la concurrencia y
    las hebras en Android
●   Aprender a internacionalizar una aplicación




                          Interfaces de Usuario   5
Hebras en Android
●   Android se basa en Linux, por lo que utiliza
    el sistema de gestión de hebras de linux
●   Vamos a ver cómo usar las hebras al
    programar en Android




                           Interfaces de Usuario   6
Ejecución Monohebra
●   Por defecto, una aplicación Android ejecuta
    sólo una hebra (single thread):
    –   Cada instrucción se ejecuta, una a
        continuación de otra
    –   Cada llamada es bloqueante
    –   La hebra que se ejecuta es la hebra de interfaz
        de usuario (UI thread), es responsable de
        'pintar' y de capturar los eventos del usuario
    –   Ejecución monohebra:

                               Interfaces de Usuario      7
¿Qué pasa si se cuelga una
           actividad?
●   El sistema operativo está 'atento', y si una
    actividad no responde (normalmente 5
    segundos), nos avisa para que 'la
    matemos'
    –   Diálogo ANR (Application Not Responding)




                              Interfaces de Usuario   8
Problema monohebra:
           bloqueo UI




Solución: usamos hebras

                          Interfaces de Usuario   9
Ejemplo
●   Una aplicación que se descarga un fichero




                       Android in Practice, Collins et al., 2011,
                       Cap 6, Manning. Ejemplo disponible en
                       http://www.manning.org/collins
                           Interfaces de Usuario                    10
Interfaz main.xml (I)




            Interfaces de Usuario   11
Interfaz main.xml (II)




            Interfaces de Usuario   12
Actividad:
SimpleImageDownload (I)




            Creo un objeto 'Runnable' para
            descargar la imagen


             Interfaces de Usuario           13
Actividad:
SimpleImageDownload (II)




             Al pinchar el botón, creo una hebra con
             el objeto Runnable y ejecuto start()



             Interfaces de Usuario               14
Para ver si ha terminado...
          trazas




              Interfaces de Usuario   15
Podemos depurar
          para ver las hebras

                                       2. Depurar
                               Proceso del sistema
                                              3. Depurar hebras

                                               4. Ver hebras (actualizar)




                            Nuestro proceso
1. Click – Selecciono proceso
                                      Interfaces de Usuario                 16
Nuestra hebra

                          UI Thread




       Interfaces de Usuario          17
Análisis
● ¿Cuánto     vive la hebra?
  –   Termina cuando termina el método run(). Puede
      terminar más tarde que la Actividad / Servicio que
      lo inició → No debería tener referencias a estos
      objetos, puede darnos problemas
● Es una 'mala solución' – No podemos indicar
 en la interfaz que hemos terminado
● ¿Quépasa si damos muchas veces al botón?
 → Generamos muchas hebras...

                               Interfaces de Usuario       18
Soluciones
●   Problemas para actualizar UI desde la
    hebra
    –   Creamos varias hebras (la UI y otras) y las
        comunicamos: Handler
●   Problemas si piden muchas hebras
    –   Creamos un 'pool' de hebras y sólo tenemos
        ese número activo
    –   Así además reutilizamos las hebras y no hace
        falta crearlas cada vez: ThreadPoolExecutor
                                Interfaces de Usuario   19
Ejecución multihebra
●   Separamos tareas 'que tardan mucho' en
    diferentes hebras
●    Así, simulamos mayor paralelismo, y la
    interfaz responde sin penalizaciones
●   Casos normales de una hebra:
    –   Un servicio de actualización que se ejecuta de
        fondo (background)
    –   Un calculo que lleva mucho tiempo
    –   Almacenamiento de datos en tarjeta SD
                                Interfaces de Usuario    20
¿Cómo programamos esto en
         Android?
●    Definiendo un servicio que se ejecuta de
    fondo y envía notificaciones a la interfaz (lo
    veremos, es la 'opción mejor')
●   Usando una hebra (thread) de fondo
     –   Usando la clase Thread y Handler directamente
          •   Las hebras no pueden notificar directamente a la hebra
              de interfaz UI
     –   Usando la clase AsyncTask, que facilita ejecutar
         tareas de fondo y publicar resultados en la hebra
         UI principal
                                       Interfaces de Usuario           21
Hebras
●    En Android, tenemos una hebra principal,
    la UIThread, que es responsable de la
    interfaz
●    Esta hebra puede crear otras hebras
    secundarias que NO pueden acceder a la
    interfaz
●   La comunicación entre la hebra ppal y las
    secundarias se hace con un Handler

                          Interfaces de Usuario   22
Handler
●   Al comunicarnos con la hebra principal con
    un Handler, podemos hacer dos cosas:
    –   Intercambiar mensajes de la cola de mensajes
        del Handler
    –   Pasar objetos Runnables para que los ejecute
        la hebra principal



         http://developer.android.com/reference/android/os/Handler.html

                                       Interfaces de Usuario              23
Comunicación hebras
                   Mensajes

                                           <<Thread>>
   Constructor con                      Hebra principal (UI)
   patrón de diseño
     Factoría para
   reutilizar objetos
                                             Handler h
                                                         handleMessage(Message msg)
1. Message msg = h.obtainMessage()
2. h.sendMessage(msg)


                           <<Thread>>                             <<Thread>>
                        Hebra secundaria 1                     Hebra secundaria 1


                                                Interfaces de Usuario               24
Esquema paso mensajes
HebraPrincipal extends Activity {
        private Handler h = new Handler() {
        public void handleMessage(Message msg) {
                 // procesa mensajes
        }

       metodo() {
          // crea una hebra secundaria
          Thread th = new Thread(new Runnable(){
                      // método de la hebra secundaria
                     ...
                     Message msg = h.obtainMessage();
                      h.sendMessage(msg);
                     ...
                      });
       }
   }

                                  Interfaces de Usuario   25
Comunicación hebras
             Cola de Tareas
                              <<Runnable>> <<Runnable>>
                               Runnable r1  Runnable r2


                                    <<Thread>>
                                 Hebra principal (UI)

                                      Handler h

h.post(r1)
h.postAtFrontOfQueue(r2)


                    <<Thread>>                             <<Thread>>
                 Hebra secundaria 1                     Hebra secundaria 1


                                         Interfaces de Usuario               26
Esquema paso tareas
HebraPrincipal extends Activity {
        private Handler h = new Handler() {
        public void onCreate() {
            …
            Thread th = new Thread(r2, “Background”);
            th.start();
        }
        private Runnable r1 = new Runnable() {
            public void run() {
                 // actualizo UI
            }
        }
        private Runnable r2 = new Runnable() {
            public void run() {
                 // ejecuto cosas
                 h.post(r1);
            }
        }
   }
                                  Interfaces de Usuario   27
Más detalle
           Sólo el thread principal tiene un
           objeto Looper, a través del que
          accede a la cola de mensajes en
                       un bucle




      Interfaces de Usuario                    28
Ejemplo con mensajes
●   Vamos a hacer una aplicación que vaya
    mostrando el progreso de la tarea de fondo
●   Usaremos ProgressBar




                          Interfaces de Usuario   29
Interfaz main.xml (I)




            Interfaces de Usuario   30
Interfaz main.xml (II)




            Interfaces de Usuario   31
Actividad (I)




        Interfaces de Usuario   32
Actividad (II)




        Interfaces de Usuario   33
Actividad (III)




         Interfaces de Usuario   34
Ejecución




     Interfaces de Usuario   35
Ejemplo paso de tareas




            Interfaces de Usuario   36
main.xml




     Interfaces de Usuario   37
Actividad (I)




        Interfaces de Usuario   38
Actividad (II)




        Interfaces de Usuario   39
Actividad (III)




         Interfaces de Usuario   40
Usando AsyncTask
●   Usar las hebras directamente es tedioso
●   Android proporciona AsyncTask
    –   Permite crear una hebra de fondo que publica
        en la hebra UI sin tener que programar
        Threads o Handlers
    –   Definimos una tarea 'asíncrona' que se ejecuta
        de fondo y publica sus resultados en la hebra
        UI


                               Interfaces de Usuario     41
AsyncTask – Uso básico
● Hebras:UI Thread (UITh) y Background Thread
 (BGTh, la AsyncTask)
●Tipos   genéricos: Params, Progress, Result
● Estados   principales
  –   onPreExecute (UITh)
  –   doInBackground (BGTh)
  –   onProgressUpdate(UITh)
  –   onPostExecutre(UITh)
● Método    auxiliar
  –   publishProgress (BGTh)
                               Interfaces de Usuario   42
AsyncTask
●   Una AsyncTask tiene 3 tipos genéricos
●   AsyncTask<Params, Progress, Result>
    –   Params – tipo de parámetros enviados a la
        tarea para su ejecución
    –   Progress – tipo de las unidades de progreso
        publicadas durante su ejecución
    –   Result – resultado de la ejecución de la tarea
●   Si no usamos un tipo, lo ponemos Void (con
    V)
                                Interfaces de Usuario    43
Métodos de AsyncTask
       ● onPreExecute():   invocado por UIth
        justo tras ejecutar la tarea
       ● doInBackground(Params)   – invocado
        por BGTh justo tras onPreExecute
       ● onProgressUpdate(Progress)    –
        invocado por UITh tras una llamada de
        BGTh a publishProgress(Progress)
       ● onPostExecute(Result)    invocado por
        UITh justo tras terminar BGTh




               Interfaces de Usuario           44
Ejemplo AsyncTask




         Interfaces de Usuario   45
Interfaz main.xml




         Interfaces de Usuario   46
Actividad MainTask




          Interfaces de Usuario   47
Actividad MainTask (II)




                                … → número de
                                  argumentos
                              variable, se procesa
                                 como un array


            Interfaces de Usuario                48
Actividad MainTask (III)




             Interfaces de Usuario   49
Yamba. StatusActivity2 (I)




              Interfaces de Usuario   50
StatusActivity2 (I)




           Interfaces de Usuario   51
Retoques finales
●   Ya tenemos la aplicación
●   Podemos
    –   Añadir que descuente el
        número de caracteres
    –   Añadir colores/imágenes




                              Interfaces de Usuario   52
ContarCaracteres main.xml




             Interfaces de Usuario   53
ContarCaracteres -
 TextWatcher (I)




          Interfaces de Usuario   54
ContarCaracteres -
TextChangedListener (III)




             Interfaces de Usuario   55
Personalización
●En Android en res podemos hacer carpetas
 con recursos para
  –   Una orientación res/layout-land/status.xml
  –   Un idioma res/values-es-rES/strings.xml
      (language-region)
●En   eclipse new->XML File



                             Interfaces de Usuario   56
Asistente recursos
   alternativos




          Interfaces de Usuario   57
Lo que llevamos hecho...




             Interfaces de Usuario   58
Resumen
●   En este tema hemos aprendido a gestionar
    concurrencia con tareas de fondo en
    Android
●   Hemos visto cómo gestionar directamente
    hebras, comunicarlas con Handlers, y cómo
    usar AsyncTasks
●   Por último, cómo darle un mejor aspecto
    visual y crear recursos alternativos

                          Interfaces de Usuario   59
¿Preguntas?




      Interfaces de Usuario   60

Contenu connexe

Tendances

Fund progbd 3_u1_lenguajeprogramacionjava1
Fund progbd 3_u1_lenguajeprogramacionjava1Fund progbd 3_u1_lenguajeprogramacionjava1
Fund progbd 3_u1_lenguajeprogramacionjava1armando_cardenas
 
Comandos, Sentencias y/o Paquetes del Lenguaje de Programación de Java
Comandos, Sentencias y/o Paquetes del Lenguaje de Programación de JavaComandos, Sentencias y/o Paquetes del Lenguaje de Programación de Java
Comandos, Sentencias y/o Paquetes del Lenguaje de Programación de JavaTania Tellez
 
Programación en Java (y II)
Programación en Java (y II)Programación en Java (y II)
Programación en Java (y II)Cristian
 
investigación de Comandos, Sentencias y/o Paquetes del Lenguaje de Programaci...
investigación de Comandos, Sentencias y/o Paquetes del Lenguaje de Programaci...investigación de Comandos, Sentencias y/o Paquetes del Lenguaje de Programaci...
investigación de Comandos, Sentencias y/o Paquetes del Lenguaje de Programaci...Arazelii Puentez
 
TABLA DE COMANDO /SENTENCIAS/PAQUETES
TABLA DE COMANDO /SENTENCIAS/PAQUETESTABLA DE COMANDO /SENTENCIAS/PAQUETES
TABLA DE COMANDO /SENTENCIAS/PAQUETESChistian Hernandez
 
Portafolio parcial 2
Portafolio parcial 2Portafolio parcial 2
Portafolio parcial 2EmmanuelAv
 

Tendances (13)

Java
JavaJava
Java
 
62016561 java
62016561 java62016561 java
62016561 java
 
CUESTIONARIO 2NDA UNIDAD
CUESTIONARIO 2NDA UNIDADCUESTIONARIO 2NDA UNIDAD
CUESTIONARIO 2NDA UNIDAD
 
Fund progbd 3_u1_lenguajeprogramacionjava1
Fund progbd 3_u1_lenguajeprogramacionjava1Fund progbd 3_u1_lenguajeprogramacionjava1
Fund progbd 3_u1_lenguajeprogramacionjava1
 
Librerias java
Librerias javaLibrerias java
Librerias java
 
Programación con java en Eclipse
Programación con java en EclipseProgramación con java en Eclipse
Programación con java en Eclipse
 
Comandos, Sentencias y/o Paquetes del Lenguaje de Programación de Java
Comandos, Sentencias y/o Paquetes del Lenguaje de Programación de JavaComandos, Sentencias y/o Paquetes del Lenguaje de Programación de Java
Comandos, Sentencias y/o Paquetes del Lenguaje de Programación de Java
 
Programación en Java (y II)
Programación en Java (y II)Programación en Java (y II)
Programación en Java (y II)
 
investigación de Comandos, Sentencias y/o Paquetes del Lenguaje de Programaci...
investigación de Comandos, Sentencias y/o Paquetes del Lenguaje de Programaci...investigación de Comandos, Sentencias y/o Paquetes del Lenguaje de Programaci...
investigación de Comandos, Sentencias y/o Paquetes del Lenguaje de Programaci...
 
TABLA DE COMANDO /SENTENCIAS/PAQUETES
TABLA DE COMANDO /SENTENCIAS/PAQUETESTABLA DE COMANDO /SENTENCIAS/PAQUETES
TABLA DE COMANDO /SENTENCIAS/PAQUETES
 
Lenguaje Java
Lenguaje JavaLenguaje Java
Lenguaje Java
 
Portafolio parcial 2
Portafolio parcial 2Portafolio parcial 2
Portafolio parcial 2
 
Java
JavaJava
Java
 

Similaire à Tema 4 3_4_interfaces_de_usuario

Tema 4 3_3_interfaces_de_usuario
Tema 4 3_3_interfaces_de_usuarioTema 4 3_3_interfaces_de_usuario
Tema 4 3_3_interfaces_de_usuarioCarlos A. Iglesias
 
Tema 4 3_1_interfaces_de_usuario
Tema 4 3_1_interfaces_de_usuarioTema 4 3_1_interfaces_de_usuario
Tema 4 3_1_interfaces_de_usuarioCarlos A. Iglesias
 
Curso Android Tema 2
Curso Android Tema 2Curso Android Tema 2
Curso Android Tema 2Frank Jorge
 
Drupal Cron
Drupal CronDrupal Cron
Drupal Cronrcechang
 
VIRTUALIZACIÓN DEL SISTEMA OPERATIVO LINUX MEDIANTE LA MÁQUINA VIRTUAL SANDBOXIE
VIRTUALIZACIÓN DEL SISTEMA OPERATIVO LINUX MEDIANTE LA MÁQUINA VIRTUAL SANDBOXIEVIRTUALIZACIÓN DEL SISTEMA OPERATIVO LINUX MEDIANTE LA MÁQUINA VIRTUAL SANDBOXIE
VIRTUALIZACIÓN DEL SISTEMA OPERATIVO LINUX MEDIANTE LA MÁQUINA VIRTUAL SANDBOXIEmiranda torres
 
Tipos de sistema operativo
Tipos de sistema operativoTipos de sistema operativo
Tipos de sistema operativoOctavio15
 
Laboratorio n3 sistemas_operativos_gilberto_ramos_9-748-1883
Laboratorio n3 sistemas_operativos_gilberto_ramos_9-748-1883Laboratorio n3 sistemas_operativos_gilberto_ramos_9-748-1883
Laboratorio n3 sistemas_operativos_gilberto_ramos_9-748-1883Ichinose 11
 
Practica software y hardware
Practica software y hardwarePractica software y hardware
Practica software y hardwareRebecca Arredondo
 
Cursini Linuxi 4ni.ppt
Cursini Linuxi 4ni.pptCursini Linuxi 4ni.ppt
Cursini Linuxi 4ni.pptjohan riuk
 
CursoLinux4_________________________.ppt
CursoLinux4_________________________.pptCursoLinux4_________________________.ppt
CursoLinux4_________________________.pptmapajoben
 
Sistemas Operativos
Sistemas Operativos Sistemas Operativos
Sistemas Operativos Dulce Sanchez
 

Similaire à Tema 4 3_4_interfaces_de_usuario (20)

Tema 4.9 Hebras
Tema 4.9 HebrasTema 4.9 Hebras
Tema 4.9 Hebras
 
Creación de Procesos en Android
Creación de Procesos en AndroidCreación de Procesos en Android
Creación de Procesos en Android
 
Tema 4 3_3_interfaces_de_usuario
Tema 4 3_3_interfaces_de_usuarioTema 4 3_3_interfaces_de_usuario
Tema 4 3_3_interfaces_de_usuario
 
Tema 4 3_1_interfaces_de_usuario
Tema 4 3_1_interfaces_de_usuarioTema 4 3_1_interfaces_de_usuario
Tema 4 3_1_interfaces_de_usuario
 
Curso Android Tema 2
Curso Android Tema 2Curso Android Tema 2
Curso Android Tema 2
 
Drupal Cron
Drupal CronDrupal Cron
Drupal Cron
 
Curso básico linux
Curso básico linuxCurso básico linux
Curso básico linux
 
Unidad 2 so
Unidad 2 soUnidad 2 so
Unidad 2 so
 
Curso desarrollo en android
Curso desarrollo en androidCurso desarrollo en android
Curso desarrollo en android
 
VIRTUALIZACIÓN DEL SISTEMA OPERATIVO LINUX MEDIANTE LA MÁQUINA VIRTUAL SANDBOXIE
VIRTUALIZACIÓN DEL SISTEMA OPERATIVO LINUX MEDIANTE LA MÁQUINA VIRTUAL SANDBOXIEVIRTUALIZACIÓN DEL SISTEMA OPERATIVO LINUX MEDIANTE LA MÁQUINA VIRTUAL SANDBOXIE
VIRTUALIZACIÓN DEL SISTEMA OPERATIVO LINUX MEDIANTE LA MÁQUINA VIRTUAL SANDBOXIE
 
Sistema operativo
Sistema operativoSistema operativo
Sistema operativo
 
Tipos de sistema operativo
Tipos de sistema operativoTipos de sistema operativo
Tipos de sistema operativo
 
DotNetDom: El futuro de Xamarin
DotNetDom: El futuro de XamarinDotNetDom: El futuro de Xamarin
DotNetDom: El futuro de Xamarin
 
Laboratorio n3 sistemas_operativos_gilberto_ramos_9-748-1883
Laboratorio n3 sistemas_operativos_gilberto_ramos_9-748-1883Laboratorio n3 sistemas_operativos_gilberto_ramos_9-748-1883
Laboratorio n3 sistemas_operativos_gilberto_ramos_9-748-1883
 
Practica software y hardware
Practica software y hardwarePractica software y hardware
Practica software y hardware
 
1 introduccion a_java_1er_parte
1 introduccion a_java_1er_parte1 introduccion a_java_1er_parte
1 introduccion a_java_1er_parte
 
Cursini Linuxi 4ni.ppt
Cursini Linuxi 4ni.pptCursini Linuxi 4ni.ppt
Cursini Linuxi 4ni.ppt
 
CursoLinux4_________________________.ppt
CursoLinux4_________________________.pptCursoLinux4_________________________.ppt
CursoLinux4_________________________.ppt
 
Sistema operativo
Sistema operativoSistema operativo
Sistema operativo
 
Sistemas Operativos
Sistemas Operativos Sistemas Operativos
Sistemas Operativos
 

Plus de Carlos A. Iglesias (20)

GSI Research Group Presentation
GSI Research Group PresentationGSI Research Group Presentation
GSI Research Group Presentation
 
Entorno PHP
Entorno PHPEntorno PHP
Entorno PHP
 
Bootstrap 3.
Bootstrap 3.Bootstrap 3.
Bootstrap 3.
 
Introducción CSS
Introducción CSSIntroducción CSS
Introducción CSS
 
Introducción HTML
Introducción HTMLIntroducción HTML
Introducción HTML
 
Presentación TEWC
Presentación TEWCPresentación TEWC
Presentación TEWC
 
UPM GSI Presentation
UPM GSI PresentationUPM GSI Presentation
UPM GSI Presentation
 
Introducción Análisis y Diseño
Introducción Análisis y DiseñoIntroducción Análisis y Diseño
Introducción Análisis y Diseño
 
PHP. Bases de Datos
PHP. Bases de DatosPHP. Bases de Datos
PHP. Bases de Datos
 
PHP. Tecnologías Web.
PHP. Tecnologías Web.PHP. Tecnologías Web.
PHP. Tecnologías Web.
 
1 intro php
1 intro php1 intro php
1 intro php
 
0 entorno php
0 entorno php0 entorno php
0 entorno php
 
Introducción TEWC
Introducción TEWCIntroducción TEWC
Introducción TEWC
 
Tema 4.1 Introduccion Android
Tema 4.1 Introduccion AndroidTema 4.1 Introduccion Android
Tema 4.1 Introduccion Android
 
Tema 4.2 Desarrollo Android e instalacion
Tema 4.2 Desarrollo Android e instalacionTema 4.2 Desarrollo Android e instalacion
Tema 4.2 Desarrollo Android e instalacion
 
Tema 4.3 Ejemplo sobre teleco
Tema 4.3 Ejemplo sobre telecoTema 4.3 Ejemplo sobre teleco
Tema 4.3 Ejemplo sobre teleco
 
Tema 4.4 Actividades
Tema 4.4 ActividadesTema 4.4 Actividades
Tema 4.4 Actividades
 
Tema 4.5 interfaces
Tema 4.5 interfacesTema 4.5 interfaces
Tema 4.5 interfaces
 
Tema 4.6 Intenciones
Tema 4.6 IntencionesTema 4.6 Intenciones
Tema 4.6 Intenciones
 
Tema 4.7 Acceso a datos
Tema 4.7 Acceso a datosTema 4.7 Acceso a datos
Tema 4.7 Acceso a datos
 

Dernier

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 

Dernier (15)

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 

Tema 4 3_4_interfaces_de_usuario

  • 1. Análisis y Diseño de Software Interfaces de Usuario Hebras e Internacionalización. Interfaz Yamba 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 en el ordenador Ampliación de conocimientos Lectura / Vídeo / Podcast Práctica libre / Experimentación Interfaces de Usuario 2
  • 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.3.1 Ejemplo SobreTeleco – 4.3.2 Layouts y Views – 4.3.3 Widgets y Trazas. Interfaz del proyecto Yamba – 4.3.4. Hebras e internacionalización. Interfaz Yamba. ● 4.4 Intenciones y Servicios [Gar10, cap7-8] ● 4.5 Acceso a Datos [Gar10, cap9] Interfaces de Usuario 3
  • 4. Bibliografía ● Libro de texto: – [Gar10] Learning Android, Marko Gargenta, O'Reilly, 2010. Disponible en http://ofps.oreilly.com/titles/9781449390501/ – Capítulos 6 – http://www.youtube.com/watch?v=-P1eiRy-klk&list=PLE08A97D36D5A255F&index=10&feature=plpp_vid – http://www.youtube.com/watch? v=CzKYgi80yUw&list=PLE08A97D36D5A255F&index=11&feature=plpp_video ● Android Developers – http://developer.android.com/guide/topics/fundamentals.html – http://developer.android.com/guide/topics/ui/index.html Interfaces de Usuario 4
  • 5. Objetivos ● Entender cómo funcionan la concurrencia y las hebras en Android ● Aprender a internacionalizar una aplicación Interfaces de Usuario 5
  • 6. Hebras en Android ● Android se basa en Linux, por lo que utiliza el sistema de gestión de hebras de linux ● Vamos a ver cómo usar las hebras al programar en Android Interfaces de Usuario 6
  • 7. Ejecución Monohebra ● Por defecto, una aplicación Android ejecuta sólo una hebra (single thread): – Cada instrucción se ejecuta, una a continuación de otra – Cada llamada es bloqueante – La hebra que se ejecuta es la hebra de interfaz de usuario (UI thread), es responsable de 'pintar' y de capturar los eventos del usuario – Ejecución monohebra: Interfaces de Usuario 7
  • 8. ¿Qué pasa si se cuelga una actividad? ● El sistema operativo está 'atento', y si una actividad no responde (normalmente 5 segundos), nos avisa para que 'la matemos' – Diálogo ANR (Application Not Responding) Interfaces de Usuario 8
  • 9. Problema monohebra: bloqueo UI Solución: usamos hebras Interfaces de Usuario 9
  • 10. Ejemplo ● Una aplicación que se descarga un fichero Android in Practice, Collins et al., 2011, Cap 6, Manning. Ejemplo disponible en http://www.manning.org/collins Interfaces de Usuario 10
  • 11. Interfaz main.xml (I) Interfaces de Usuario 11
  • 12. Interfaz main.xml (II) Interfaces de Usuario 12
  • 13. Actividad: SimpleImageDownload (I) Creo un objeto 'Runnable' para descargar la imagen Interfaces de Usuario 13
  • 14. Actividad: SimpleImageDownload (II) Al pinchar el botón, creo una hebra con el objeto Runnable y ejecuto start() Interfaces de Usuario 14
  • 15. Para ver si ha terminado... trazas Interfaces de Usuario 15
  • 16. Podemos depurar para ver las hebras 2. Depurar Proceso del sistema 3. Depurar hebras 4. Ver hebras (actualizar) Nuestro proceso 1. Click – Selecciono proceso Interfaces de Usuario 16
  • 17. Nuestra hebra UI Thread Interfaces de Usuario 17
  • 18. Análisis ● ¿Cuánto vive la hebra? – Termina cuando termina el método run(). Puede terminar más tarde que la Actividad / Servicio que lo inició → No debería tener referencias a estos objetos, puede darnos problemas ● Es una 'mala solución' – No podemos indicar en la interfaz que hemos terminado ● ¿Quépasa si damos muchas veces al botón? → Generamos muchas hebras... Interfaces de Usuario 18
  • 19. Soluciones ● Problemas para actualizar UI desde la hebra – Creamos varias hebras (la UI y otras) y las comunicamos: Handler ● Problemas si piden muchas hebras – Creamos un 'pool' de hebras y sólo tenemos ese número activo – Así además reutilizamos las hebras y no hace falta crearlas cada vez: ThreadPoolExecutor Interfaces de Usuario 19
  • 20. Ejecución multihebra ● Separamos tareas 'que tardan mucho' en diferentes hebras ● Así, simulamos mayor paralelismo, y la interfaz responde sin penalizaciones ● Casos normales de una hebra: – Un servicio de actualización que se ejecuta de fondo (background) – Un calculo que lleva mucho tiempo – Almacenamiento de datos en tarjeta SD Interfaces de Usuario 20
  • 21. ¿Cómo programamos esto en Android? ● Definiendo un servicio que se ejecuta de fondo y envía notificaciones a la interfaz (lo veremos, es la 'opción mejor') ● Usando una hebra (thread) de fondo – Usando la clase Thread y Handler directamente • Las hebras no pueden notificar directamente a la hebra de interfaz UI – Usando la clase AsyncTask, que facilita ejecutar tareas de fondo y publicar resultados en la hebra UI principal Interfaces de Usuario 21
  • 22. Hebras ● En Android, tenemos una hebra principal, la UIThread, que es responsable de la interfaz ● Esta hebra puede crear otras hebras secundarias que NO pueden acceder a la interfaz ● La comunicación entre la hebra ppal y las secundarias se hace con un Handler Interfaces de Usuario 22
  • 23. Handler ● Al comunicarnos con la hebra principal con un Handler, podemos hacer dos cosas: – Intercambiar mensajes de la cola de mensajes del Handler – Pasar objetos Runnables para que los ejecute la hebra principal http://developer.android.com/reference/android/os/Handler.html Interfaces de Usuario 23
  • 24. Comunicación hebras Mensajes <<Thread>> Constructor con Hebra principal (UI) patrón de diseño Factoría para reutilizar objetos Handler h handleMessage(Message msg) 1. Message msg = h.obtainMessage() 2. h.sendMessage(msg) <<Thread>> <<Thread>> Hebra secundaria 1 Hebra secundaria 1 Interfaces de Usuario 24
  • 25. Esquema paso mensajes HebraPrincipal extends Activity { private Handler h = new Handler() { public void handleMessage(Message msg) { // procesa mensajes } metodo() { // crea una hebra secundaria Thread th = new Thread(new Runnable(){ // método de la hebra secundaria ... Message msg = h.obtainMessage(); h.sendMessage(msg); ... }); } } Interfaces de Usuario 25
  • 26. Comunicación hebras Cola de Tareas <<Runnable>> <<Runnable>> Runnable r1 Runnable r2 <<Thread>> Hebra principal (UI) Handler h h.post(r1) h.postAtFrontOfQueue(r2) <<Thread>> <<Thread>> Hebra secundaria 1 Hebra secundaria 1 Interfaces de Usuario 26
  • 27. Esquema paso tareas HebraPrincipal extends Activity { private Handler h = new Handler() { public void onCreate() { … Thread th = new Thread(r2, “Background”); th.start(); } private Runnable r1 = new Runnable() { public void run() { // actualizo UI } } private Runnable r2 = new Runnable() { public void run() { // ejecuto cosas h.post(r1); } } } Interfaces de Usuario 27
  • 28. Más detalle Sólo el thread principal tiene un objeto Looper, a través del que accede a la cola de mensajes en un bucle Interfaces de Usuario 28
  • 29. Ejemplo con mensajes ● Vamos a hacer una aplicación que vaya mostrando el progreso de la tarea de fondo ● Usaremos ProgressBar Interfaces de Usuario 29
  • 30. Interfaz main.xml (I) Interfaces de Usuario 30
  • 31. Interfaz main.xml (II) Interfaces de Usuario 31
  • 32. Actividad (I) Interfaces de Usuario 32
  • 33. Actividad (II) Interfaces de Usuario 33
  • 34. Actividad (III) Interfaces de Usuario 34
  • 35. Ejecución Interfaces de Usuario 35
  • 36. Ejemplo paso de tareas Interfaces de Usuario 36
  • 37. main.xml Interfaces de Usuario 37
  • 38. Actividad (I) Interfaces de Usuario 38
  • 39. Actividad (II) Interfaces de Usuario 39
  • 40. Actividad (III) Interfaces de Usuario 40
  • 41. Usando AsyncTask ● Usar las hebras directamente es tedioso ● Android proporciona AsyncTask – Permite crear una hebra de fondo que publica en la hebra UI sin tener que programar Threads o Handlers – Definimos una tarea 'asíncrona' que se ejecuta de fondo y publica sus resultados en la hebra UI Interfaces de Usuario 41
  • 42. AsyncTask – Uso básico ● Hebras:UI Thread (UITh) y Background Thread (BGTh, la AsyncTask) ●Tipos genéricos: Params, Progress, Result ● Estados principales – onPreExecute (UITh) – doInBackground (BGTh) – onProgressUpdate(UITh) – onPostExecutre(UITh) ● Método auxiliar – publishProgress (BGTh) Interfaces de Usuario 42
  • 43. AsyncTask ● Una AsyncTask tiene 3 tipos genéricos ● AsyncTask<Params, Progress, Result> – Params – tipo de parámetros enviados a la tarea para su ejecución – Progress – tipo de las unidades de progreso publicadas durante su ejecución – Result – resultado de la ejecución de la tarea ● Si no usamos un tipo, lo ponemos Void (con V) Interfaces de Usuario 43
  • 44. Métodos de AsyncTask ● onPreExecute(): invocado por UIth justo tras ejecutar la tarea ● doInBackground(Params) – invocado por BGTh justo tras onPreExecute ● onProgressUpdate(Progress) – invocado por UITh tras una llamada de BGTh a publishProgress(Progress) ● onPostExecute(Result) invocado por UITh justo tras terminar BGTh Interfaces de Usuario 44
  • 45. Ejemplo AsyncTask Interfaces de Usuario 45
  • 46. Interfaz main.xml Interfaces de Usuario 46
  • 47. Actividad MainTask Interfaces de Usuario 47
  • 48. Actividad MainTask (II) … → número de argumentos variable, se procesa como un array Interfaces de Usuario 48
  • 49. Actividad MainTask (III) Interfaces de Usuario 49
  • 50. Yamba. StatusActivity2 (I) Interfaces de Usuario 50
  • 51. StatusActivity2 (I) Interfaces de Usuario 51
  • 52. Retoques finales ● Ya tenemos la aplicación ● Podemos – Añadir que descuente el número de caracteres – Añadir colores/imágenes Interfaces de Usuario 52
  • 53. ContarCaracteres main.xml Interfaces de Usuario 53
  • 54. ContarCaracteres - TextWatcher (I) Interfaces de Usuario 54
  • 56. Personalización ●En Android en res podemos hacer carpetas con recursos para – Una orientación res/layout-land/status.xml – Un idioma res/values-es-rES/strings.xml (language-region) ●En eclipse new->XML File Interfaces de Usuario 56
  • 57. Asistente recursos alternativos Interfaces de Usuario 57
  • 58. Lo que llevamos hecho... Interfaces de Usuario 58
  • 59. Resumen ● En este tema hemos aprendido a gestionar concurrencia con tareas de fondo en Android ● Hemos visto cómo gestionar directamente hebras, comunicarlas con Handlers, y cómo usar AsyncTasks ● Por último, cómo darle un mejor aspecto visual y crear recursos alternativos Interfaces de Usuario 59
  • 60. ¿Preguntas? Interfaces de Usuario 60