Skip to content

Proyecto ejemplo: tareas en segundo plano en Aplicación Android

Vamos a ver un ejemplo práctico de implementación de tareas background en Android, con un proyecto  en el que gestionaremos varios hilos en segundo plano mediante el uso de la clase AsyncTask.

La aplicación que vamos a describir paso a paso, se encargará de simular tres barras de progreso , actualizando tanto el aspecto visual de la barra como el porcentaje asociado a la misma. Cada barra estará controlada por un hilo secundario en el que se modificarán los tiempo de duración para comprobar que dichos procesos no bloquean el hilo principal de la aplicación.

Como es habitual, podrás descargar todo el código del proyecto al final de este tutorial (usuarios Premium)

Descripción de la Aplicación

Aunque mostraremos la aplicación en funcionamiento en un próximo video, para hacernos una idea podemos ver la pantalla principal de la app en la imagen de abajo.

Como se aprecia, mostrará un botón junto con tres barras de progreso. Al ser pulsado dicho botón («Tareas Segundo Plano»), se mostrará el proceso de avance de los diferentes componentes visuales:

Pantalla Aplicación Tareas Background

A continuación, enumeramos los elementos necesarios para el desarrollo del proyecto que vamos a denominar «TareasSegundoPlano»:

  • Clase MainActivity, que herede de la clase base Activity, y cuya principal característica será la de lanzar las tareas que se ejecutarán en segundo plano, mostrando el progreso de las mismas.
  • Clase PorcentajeDos, que herede de la clase AsyncTask, y que gestionará una barra de progreso en segundo plano, actualizando el porcentaje cada 200 milésimas (1/5 segundo).
  • Clase PorcentajeCinco, que herede de la clase AsyncTask, y que gestionará una barra de progreso en segundo plano, actualizando el porcentaje cada 500 milésimas (1/2 segundo).
  • Clase PorcentajeDiez, que herede de la clase AsyncTask, y que gestionará una barra de progreso en segundo plano, actualizando el porcentaje cada 1000 milésimas (1 segundo).
  • Layout activity_main.xml, formado por un layout de tipo RelativeLayout, y que a su vez contiene un TableLayout, que dispondrá en diferentes filas tanto el botón como las barras de progreso implementadas.

Versiones utilizadas: para realizar este proyecto se ha utilizado la versión de Android Studio 2.1.2 y la Versión SDK de compilación: API 23 para Android 6.0 Marshmallow.

Estructura del proyecto

Siguiendo con la lógica general de presentación del proyecto, en la siguiente imagen se visualizará la estructura de elementos que intervienen, todo desde la vista Android:

Estructura proyecto Tareas segundo plano

Descripción del código fuente

Continuando con la descripción del proyecto, en las siguientes líneas explicamos el código de las clases y fichero de layout que componen el mismo.

TareasSegundoPlano\app\src\main\java\com\academiaandroid\tareassegundoplano\MainActivity.class

Activity que mostrará un control de tipo Button y tres controles de tipo ProgressBar (control que indicará de manera gráfica el progreso de una tarea), que comenzarán su progreso una vez el usuario pulse el botón definido:

Se declara una variable de tipo Button a nivel de clase:

Posteriormente, dentro del método onCreate(), se asigna a la variable de tipo Button, el identificador único del control definido a nivel de layout, mediante el método findViewById():

Finalmente, y todavía dentro del método onCreate(), se invoca al método setOnClickListener() del objeto btnTareaSegundoPlano, encargado de controlar la pulsación del botón y crear una instancia de la clase PorcentajeDos().
Procesará una de las tareas en segundo plano y recibe como argumento de entrada el contexto de la aplicación.
Además como se puede apreciar, invoca al método execute(), para la realización de la tarea:

TareasSegundoPlano\app\src\main\java\com\academiaandroid\tareassegundoplano\PorcentajeDos.class

Clase encargada de gestionar el porcentaje de una barra de progreso, en segundo plano, actualizando dicho componente cada 200 milésimas.

Esta clase heredará de la clase base Asynctask<String, Integer, String> que como se comenta en apartados anteriores, define tres tipos genéricos, que en este ejemplo se trata de:

  • String: parámetro que se recibirá como entrada para la tarea en el método doInBackground(Params), y que mostrará el texto «Carga Finalizada X2»
  • Integer: parámetro que actualizará el hilo principal mediante el avance de la barra de progreso
  • String: que será el resultado devuelto por el procesamiento en segundo plano, en este caso el texto pasado como parámetro desde el método execute():
Se declaran a nivel de clase una variable de tipo MainActivity (establecerá el contexto de la aplicación para mostrar los diferentes mensajes por pantalla), una variable de tipo ProgressBar (permitirá actualizar la barra de progreso), y una variable de tipo TextView (actualizará el porcentaje actual):
Se define un constructor para establecer el contexto de la Activity de la aplicación:
El siguiente método será invocado al lanzar el hilo, mostrando el mensaje de «Progreso X2»:
El método doInBackground(), procesará el parámetro de entrada (en nuestro caso sólo será un mensaje que se muestre al finalizar la tarea) y actualizará el progreso del componente ProgressBar. Una de las particularidades del código situado dentro de este método, consiste en invocar al método sleep() de la clase Thread, para realizar una pausa de 200 milésimas en cada iteración (así se simula correctamente el funcionamiento de una barra de progreso):
Se establecen 100 iteraciones, por lo tanto se actualizará ese número de iteraciones el hilo principal de la aplicación:
Este método asigna a la variable de tipo TextView su identificador único (control definido en el layout de la Activity principal). Como se puede apreciar, se invoca al método findViewById() desde el contexto de la aplicación definido en el constructor de esta clase. Finalmente se actualizará el valor de la variable TextView por cada ciclo del método doInBackground():
El siguiente método tiene la particularidad de instanciar la clase PorcentajeCinco, para ejecutar dicha tarea en segundo plano:

Nota: Se utiliza la clase PorcentajeDos como ejemplo para describir el código fuente, ya que el resto de clases (PorcentajeCinco y PorcentajeDiez) tiene una estructura similar, salvo en el texto que se mostrará al lanzar y finalizar el hilo, como la frecuencia de actualización de la barra de progreso (parámetro del método sleep()  dentro de doInBackground() ).

TareasSegundoPlano\app\src\main\res\layout\activity_main.xml

Layout activity_main.xml que estará formado por un TableLayout, que establece la disposición de los elementos ordenados en filas, en las que se definen un control de tipo Button, y tres controles de tipo ProgressBar para las diferentes tareas que serán lanzadas por el usuario:

Descarga del proyecto

En este botón puedes descargar todo el proyecto:

Download

 

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