contacto[arroba]digitallearning.es
Esquema Funcionamiento Ejecución Tareas Segundo Plano

Ejemplo tareas en segundo plano en Android: Aplicación de descarga de ficheros (I)

Post Series: Tareas en segundo plano en Android

Para este ejercicio práctico, utilizaremos las clases Thread, Handler y AsyncTask para realizar tareas en segundo plano, como pueden ser ver el funcionamiento de una barra de progreso o la descarga de una imagen.

La estructura de la aplicación estará formada por una clase MainActivity que heredará de Activity, donde se definirán los elementos visuales y eventos encargados de realizar las diferentes llamadas, para ejecutar tareas en background.

En esta clase además se implementa e instancia las tareas con Thread y Handler. También definiremos una clase llamada TareaAsyncTask, que heredará de la clase AsyncTask, encargada de realizar tareas menos costosas (se encargará de mostrar un componente ProgressDialog para descargar una imagen).

Nota: Dividiremos esta aplicación en dos publicaciones. En la 2ª de ellas, podrás como siempre descargar todo el código de la aplicación.

Esquema funcionamiento Thread + Handler

En el siguiente esquema, se describen los pasos realizados para la ejecución de tareas en segundo plano con el uso de las clases Thread y Handler:

  1. Pulsamos el botón «Arrancar Hilo + Handler».
  2. Mostrará que tarea se está ejecutando.
  3. Mensaje emergente indicando que la tarea ha sido lanzada.
  4. El componente ProgressBar comienza a mostrar el progreso de ejecución.
  5. Al llegar al 100%, mostrará un mensaje emergente indicando que la tarea ha finalizado, habilitando el botón «Reiniciar Barra de Progreso».

Esquema funcionamiento ejecución tareas segundo plano

Esquema funcionamiento AsyncTask

En el siguiente esquema, se describen los pasos realizados para la ejecución de tareas en segundo plano con el uso de la clase AsyncTask:

  1. Pulsamos el botón «Arrancar AsyncTask».
  2. Mostrará que tarea se está ejecutando.
  3. Mensaje indicando que la tarea de descarga de archivo está en proceso.
  4. Se muestra la imagen descargada.
  5. Se habilita el botón «Detener AsyncTask», para detener la tarea y reiniciar el componente eliminando la imagen descargada.

Esquema funcionamiento AsyncTask

A nivel de Layout será necesario añadir los siguientes elementos:

  • Cuatro componentes de tipo Button encargados de lanzar o reiniciar/detener las tareas en segundo plano.
  • Dos componentes de tipo TextView para mostrar la tarea lanzada y el estado de progreso de la misma.
  • Además será necesario definir un componente de tipo ProgressBar para mostrar el progreso de la tarea lanzada, utilizando la clase Thread en conjunto con la clase Handler (esta última estará encargada de comunicar y refrescar la UIThread o hilo principal con los cambios).
  • Se definirá, de manera programática, un componente ProgressDialog, cuya misión será la de mostrar la tarea de descarga de una imagen, mediante el uso de la clase AsyncTask (será necesario establecer permisos de Internet en el AndroidManifest.xml).

TareasSegundoPlano/src/com.academiaandroid.tareassegundoplano/MainActivity.java

  1. En primer lugar se enlazan los componentes con los recursos definidos a nivel de layout, dónde podemos destacar el uso del componente ProgressBar para mostrar una tarea en ejecución, y el componente ImageView, que inicialmente no mostrará ninguna imagen, para posteriormente mostrar la imagen descargada.
 

  1. Posteriormente se define el evento encargado de controlar si el botón de ‘Arrancar AsyncTask‘ ha sido pulsado, para llamar al método ‘ execute() ‘, cuya misión es la de lanzar la ejecución de la tarea, recibiendo como parámetro la URL de la imagen a descargar.

 

  1. Otra de las opciones implementadas es poder refrescar el componente TextView encargado de mostrar el porcentaje de la tarea lanzada, mediante el uso de la clase Handler.

 

  1. Por último se define el método runThread() , encargado de lanzar un nuevo hilo de ejecución (al pulsar sobre el botónArrancar Hilo + Handler‘), cuya función principal será recorrer las 100 posiciones establecidas en la barra de progreso, actualizando la información del porcentaje por cada ciclo del bucle ‘for‘ implementado.

 

 

Continuamos este proyecto en la siguiente publicación. donde podrás descargar todo el código del mismo.