Está en la página 1de 29

THREADS

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

temas cubiertos
Thread :: concurrencia
Handler :: mensajes entre
threads
AsyncTask :: tareas en
background

Threads o hilos
UN 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 no
responde en la thread
principal (UI) android se
queja
en 5s!
hay que sacar de la UI todo
lo que consume tiempo
tareas largas
tareas que dependen de la
red, ficheros,

Theards
las threads
se crean con start()
las threads terminan cuando
acaba run()
una thread terminada no se
puede volver a
arrancar

patrones

no hay una regla universal


es importante no dejar threads corriendo
si la aplicacin termina

threads 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 UI
podemos 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-safe
ahora todo el cdigo se ejecuta en 1 tarea
y
no 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 las
tareas: 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 separado

AsyncTask - mtodos
class MyClass extends AsyncTask
<Params,Progress,Result>{

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 - 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 vez

AsyncTask 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 trabajar
en 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 un sistema orientado a la interaccin con el usuario a 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 realizamos una tarea larga (con un coste elevado), mantenemos
ocupado al Hilo Principal,bloqueamos la ejecucin del resto de
componentes de la aplicacin y el usuario tiene la sensacin de lentitud,
bloqueo o mal funcionamiento de la aplicacin.

CARACTERISTICAS
Ejecucin 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


hilos
La 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


hilos
Paralelismo dentro del proceso
Facilidad de implementacin
Separacin de variables globales, espacios de
direcciones y ficheros abiertos
La ejecucin concurrente de hilos puede mejorar la eficiencia
del sistema

También podría gustarte