Saltear al contenido principal

Thread, Handler y AsyncTask ¿cuál elegir?

Tareas en segundo plano en Android
1. Ejecución de tareas en segundo plano en Android
2. Thread, Handler y AsyncTask ¿cuál elegir?
3. Ejemplo tareas en segundo plano en Android: Aplicación de descarga de ficheros (I)
4. Ejemplo tareas en segundo plano en Android: Aplicación de descarga de ficheros (II)
5. Videotutorial: desarrollo aplicación Android con ejecución de tareas en 2º plano

Continuamos hablando sobre las clases AsyncTask, Handler y Thread que nos permiten gestionar la ejecución de tareas en segundo plano en Android, abordando los dos siguientes objetivos que marcamos en el tutorial inicial:

  • Cuáles son sus principales características.
  • Cuándo se recomienda el uso de AsyncTask y cuando el uso de Threads.

Principales características de las clases Thread, Handler y AsyncTask

Thread

  • Ejecución de tareas en paralelo o de manera concurrente.
  • Los hilos de ejecución comparten el espacio de memoria.
  • El conjunto de hilos en ejecución que comparten los mismos recursos es conocido como un proceso.
  • Cualquier modificación 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 ejecución y el estado de la CPU.
  • Un proceso seguirá en ejecución si al menos uno de sus hilos de ejecución sigue activo. Si un proceso finaliza, todos sus hilos de ejecución también lo harán.

Handler

  • Permiten poner en cola una acción que se realiza en un subproceso distinto al suyo.
  • Cada instancia de la clase Handler está asociada a un sólo hilo y a la cola de mensajes de este.
  • Comunicación del hilo secundario con el hilo principal o UIThread a través de un controlador.
  • Proporciona varios métodos para poner en cola un mensaje en la parte delantera o enviar al final de la cola después de un determinado tiempo ( sendMessageAtFrontOfQueue(Message msg) y sendMessageAtTime(Message msg, long uptimeMillis) ).

AsyncTask

  • Proporciona un mayor control y orden en la ejecución de nuestros procesos en segundo plano.
  • Marco de trabajo para operaciones no muy costosas.
  • A partir de la versión Android 3.0 (Honeycomb) las tareas se ejecutan en un sólo hilo, para evitar errores derivados de ejecuciones en paralelo.
  • Tarea asíncrona definida en 4 pasos ( OnPreExecute(), doInBackground(Params...), OnProgressUpdate(Progress...) y onPostExecute(Result...))

 

AsyncTask vs Thread

En este punto nos detendremos para comprender las situaciones en las que se recomienda el uso de una clase u otra, dependiendo de las necesidades del proyecto:

 

Uso de AsynTask Uso de Threads
  • En operaciones de red que no requieran la descarga de grandes cantidades de datos.
  • Tareas sobre disco que no tomen más de algunos segundos.
  • En tareas cuyo resultado del procesamiento en segundo plano vaya a ser publicado en el subproceso del hilo de la interfaz de usuario.
  • No es necesario el uso de Handler.
  • En operaciones de red, ya sea de carga o descarga, con una moderada o alta cantidad de datos.
  • En tareas de gran consumo de CPU que deban ejecutarse en segundo plano.
  • En tareas que sea necesario controlar el consumo de CPU por parte del hilo gráfico a GUI (graphical user interface).
  • En tareas que deseemos controlar la prioridad de ejecución (cola de procesamiento).
  • No interacciona con el hilo de interfaz de usuario, siempre y cuando, el ciclo de vida de la aplicación no esté destinada a ejecutarse en segundo plano.

 


Volver arriba