Threads

Threads
- Nos permiten ejecutar procesos en paralelo
- Deberían realizar las operaciones no instantáneas (que podrían bloquear nuestro proceso principal)
- Operaciones que se ejecuten constantemente (encuesta: progressbar)
- No pueden modificar elementos de la vista:
- View.post(Runnable)
- View.postDelayed(Runnable, long)
Ejemplo
new Thread(new Runnable() {
public void run() {
int i = 0;
while (i < 10000) {
Thread.sleep(1000);
Log.v(”thread”,”awake”);
i += 1000;
}
}
}).start();
Thread th = new Thread(..... );
th.start(); th.interrupt();
AsyncTask
- Encapsula la creación de un proceso en segundo plano y la sincronización con el hilo principal.
- También nos permite publicar el progreso de la tarea en segundo plano.
- Para usarla debemos extenderla.
- Las AsyncTask usan parámetros genéricos y varargs (argumentos variables):
AsyncTask <TypeOfVarArgParams , ProgressValue , ResultValue> .
AsyncTask
-
onPreExecute():
- Se ejecutará antes del código principal de nuestra tarea.
- Se suele utilizar para preparar la ejecución de la tarea, inicializar la interfaz, etc.
-
doInBackground():
- Contendrá el código principal de nuestra tarea.
-
onProgressUpdate():
- Se ejecutará cada vez que llamemos al método publishProgress() desde el métododoInBackground().
AsyncTask
- onPostExecute():
- Se ejecutará cuando finalice nuestra tarea, o dicho de otra forma, tras la finalización del métododoInBackground().
- onCancelled():
- Se ejecutará cuando se cancele la ejecución de la tarea antes de su finalización normal.
AsyncTask

Ejemplo
public void onClick(View v) {
MyTask task = new MyTask();
task.execute(4);
task.cancel();
}
private class MyTask extends AsyncTask<Integer, Integer, String> {
@Override
protected String doInBackground(Integer... param) {
//hacer operaciones
publishProgress(int); //actualizar progreso
return resultado;
}
@Override
protected void onPostExecute(String result) {
tView.setText(result); //dialog, toast.. lo que queramos
super.onPostExecute();
}
Ejemplo
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values[0]);
Log.i( ”task", ”progress update: " + String.valueOf( values[0] ) );
}
@Override
protected void onPreExecute() { //inicializaciones
Log.i( "task", "on preExecute" );
super.onPreExecute();
}
@Override
protected void onCancelled() { //fin
Log.i( "task", "on cancelled" );
super.onCancelled();
}
}
Handler
- Thread que ejecuta operaciones, envía resultados a proceso principal
- Utiliza elementos de la clase Message para enviar los resultados
- Se envían mediante handler (se reciben en el handler del proceso principal)
- Proceso principal obtiene argumentos y actúa en consecuencia
Clase IntentService
-
Mejora de la clase Service, implementaciones
por defecto y threads:
-
Crea un thread para ejecutar todos los intents que lleguen a onStartCommand()
-
Cola de trabajo para todos los intents, se envían uno a uno a onHandleIntent()
-
Se para solo mediante stopSelf() cuando acaba
-
Implementación por defecto de onBind(), return null
-
Implementación por defecto de onStartCommand(),
que envía los Intent a la función onHandleIntent()
-
Threads
By marcos_perez
Threads
- 653