hilos en android modificado

29
Integrantes : Girio Diaz Yefri A. Rosales Huertas José M. THREADS

Upload: miguel-angel-castillo-infantes

Post on 08-Sep-2015

219 views

Category:

Documents


0 download

DESCRIPTION

hilos en android

TRANSCRIPT

Presentacin de PowerPoint

Integrantes :Girio Diaz Yefri A.Rosales Huertas Jos M.THREADS

temas cubiertos Thread :: concurrencia Handler :: mensajes entre threads AsyncTask :: tareas en backgroundThreads o hilosUN HILO O SUB PROCESO ES LA UNIDAD DE PROCESAMIENTO MAS PEQUEAS QUE PUEDE SE PLANIFICADA EN UN SISTEMA OPERATIVO

PERMITE A UNA APLICACIN REALIZADA VARIAS TAREAS A LA VEZ , ES DECIR , DE FORMA CONCURRENTE

Cada vez que se lanza una nueva aplicacin en Android el sistema crea un nuevo proceso Linux para ella y la ejecuta en su propia mquina virtual Dalvik (Por supuesto si est programada en Java, si lo estuviera en cdigo nativo no hara falta la mquina virtual). Trabajar en procesos diferentes nos garantiza que desde una aplicacin no se pueda acceder a la memoria (cdigo o variables) de otras aplicaciones. Como se ver en un prximo captulo esta caracterstica se hereda directamente del sistema operativo Linux.

Los S.O. modernos incorporan el concepto de hilo de ejecucin (thread). En un sistema multihilo un proceso va a poder realizar varias tareas a la vez, cada una en un hilo diferente. Los diferentes hilos de un proceso lo comparten todo: variables, cdigo, permisos, ficheros abiertos, etc.

Theards tenemos todo lo de java de tareas una aplicacin Android 1 Activity -> 1 Thread encargada de la UI captura de eventos: clics refresco de la pantalla las dems tareas no deben bloquear la UI para mantener la agilidad de respuesta solucin: 1. mandar el trabajo pesado a otras threads 2. devolver los resultados a UI para que los presente android se autodefiende si una aplicacin noresponde en la threadprincipal (UI) android sequeja en 5s! hay que sacar de la UI todolo que consume tiempo tareas largas tareas que dependen de lared, ficheros,

Theardslas threads se crean con start() las threads terminan cuando acaba run() una thread terminada no se puede volver aarrancarpatrones

no hay una regla universal es importante no dejar threads corriendo si la aplicacin terminathreads auxiliares

Handler

Mecanismo de comunicacin entre tareas unidireccional hay tareas que envan y una tarea recibe podemos mandar mensajes la tarea receptora ya sabr qu hacer el mensaje se procesa en la thread receptora cdigo ejecutable para que lo ejecute la receptora el cdigo se ejecuta en la thread receptora

Handler en la thread UIpodemos mandar mensajes la tarea receptora ya sabr qu hacer el mensaje se procesa en la thread UI cdigo ejecutable para que lo ejecute la receptora el cdigo se ejecuta en la thread UI aunque la UI no sea thread-safeahora todo el cdigo se ejecuta en 1 tarea yno hay problemas de sincronizacin

el handler mantiene una cola para secuenciar lo que hace

envo de mensajes

envo de mensajes

recepcin de mensajes

Message Es un recipiente para llevar objetos no olvide que la RAM es la misma para todas lastareas: slo enviamos referencias

AsyncTask

Para facilitar el uso de tareas como ejecucin en background android ofrece AsyncTask son tareas: Threads con mtodos que se ejecutan en el thread apropiado 1. UI el principal 2. su thread separadoclass MyClass extends AsyncTask {se ejecutan en la UI void onPreExecute() inicializacin void onProgressUpdate(Progress ) void onPostExecute(Result)se ejecutan en la thread Result doInBackground(Params ) similar al run() llama publishProgress(Progress )AsyncTask - mtodosAsyncTask - reglas los objetos deben crearse en la UI execute() se llama en la UI ejecutando doInBackground en la otra thread no se debe llamar manualmente a los mtodos de la asynctask una asynctask slo puede ejecutarse 1 vezAsyncTask cada cosa en su thread

Ejemplo de trabajar solo en el hilo principal

Presumamos que lo hacemos todo en el hilo principal. En la siguiente imagen, representamos el hilo principal en el tiempo con la flecha en verde. En el interior del hilo principal, de izquierda a derecha podemos ver cmo avanza el tiempo y lo que va haciendo nuestra aplicacin a medida que se va usando el dispositivo (cada SmartPhone dibujado es un paso completo que corresponde con lo que est procesando el hilo principal debajo justo).Como vemos en la anterior imagen, el usuario pulsa descargar. Pero al procesarse la descarga de datos Internet en el mismo hilo que se encarga de procesar lo que vemos en la pantalla, y de procesar el toque con el dedo encima del cristal de la pantalla. El usuario queda bloqueado, a razn de que el mismo hilo principal no da abasto con tanto trabajo que tiene que hacer, primero tiene que acabar lo que ha empezado. Poniendo en cola cualquier otro trabajo, como el de tocar la pantalla y haciendo esperar al usuario (ver cara triste del usuario, que significa desinstalando la aplicacin y votando negativo en Google Play en 3,2,1). Cosa que nunca se tiene que hacer, el usuario nunca ha de esperar; es decir, el hilo principal nunca debe quedar bloqueado con mucha carga de trabajo.Ejemplo de trabajaren el hilo secundario

Tenemos varios hilos que creen otros hilos e hilos diferentes que esperen por datos de otros hilos. Vamos a ver la siguiente imagen para ver qu podemos hacer muchas cosas en segundo plano. Veremos cmo mantener todo esto controlado de una manera muy sencilla.Como el hilo principal lanza varios hilos en segundo plano y algunos de estos hilos crean otros hilos. Eso s, como algunos requieren datos de otros hilos al final unos han de esperar por ciertos eventos que realizan otros y con ello ser notificados. Con esto introducimos como comunicar hilos con la programacin dirigida por eventos.Por qu es necesario programar Hilos en Android (Threads)?Android es unsistema orientado a la interaccin con el usuarioa travs de eventos.Cuando el usuario interacta con la aplicacin,todas las tareas se realizan en el mismo hilo de ejecucin, el conocido Hilo Principal. Aqu, es donde se ejecutan todas las operaciones que gestionan la interfaz de usuario.Si realizamosuna tarea larga(con un coste elevado), mantenemos ocupado al Hilo Principal,bloqueamos la ejecucindel resto de componentes de la aplicacin y el usuario tienela sensacin de lentitud, bloqueo o mal funcionamiento de la aplicacin.

CARACTERISTICASEjecucin de tareas en paralelo o de manera concurrente.Los hilos de ejecucin comparten el espacio de memoria.El conjunto de hilos en ejecucin que comparten los mismos recursos es conocido como un proceso.Cualquier modificacin de un dato en memoria, por parte de un hilo, permite el acceso al dato modificado para el resto de hilos de manera inmediata.Cada hilo presenta de manera propia el contador de programa, la pila de ejecucin y el estado de la CPU.Un proceso seguir en ejecucin si al menos uno de sus hilos de ejecucin sigue activo. Si un proceso finaliza, todos sus hilos de ejecucin tambin lo harn.Ventajas de utilizar mltiples hilosLa ejecucin concurrente de hilos de un mismo proceso puede mejorar la eficiencia del sistema.Paralelismo dentro del proceso (en multiprocesadores).Las operaciones bloqueantes no paralizan al proceso (completo).Mayor eficiencia que con mltiples procesos en:Creacin/eliminacin de unidades de planificacin.Cambio de contexto.Una buena solucin para sistemas cliente/servidor.Facilidad de implementacin.Desventajas de utilizar mltiples hilosParalelismo dentro del procesoFacilidad de implementacinSeparacin de variables globales, espacios de direcciones y ficheros abiertosLa ejecucin concurrente de hilos puede mejorar la eficiencia del sistema