Skip to content

Thread, Handler y AsyncTask ¿cuál elegir?

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
Esta web usa cookies para su correcto funcionamiento. No hay cookies de publicidad, aunque algunos de los contenidos mostrados (videos o documentos insertados) están alojados en servicios externos (Youtube, Vimeo, Box...) que sí pueden implementar sus propias cookies. También se ha incluido en pruebas un Agente AI que incluye sus propias cookies   
Privacidad