NOVEDADES IMPORTANTES

Acceso a todos los contenidos

Hace unos meses decidimos suspender nuestra actividad de formación online en Digital Learning SL (propietaria de esta web).

Desde entones hemos mantenido operativos nuestra plataforma de teleformación y webs de contenidos Academia Android y Digital Learning, habilitando un acceso libre y gratuito a todos estos recursos, incluyendo cursos y contenidos Premium que antes requerían un registro y pago previo, lo que ha propiciado un volumen de visitas constante de usuarios que consultan esta formación.

Venta-traspaso de los contenidos

Creemos que estas webs por sus contenidos, posicionamiento SEO y atracción de tráfico (junto a sus cuentas en redes sociales asociadas, incluyendo Twitter y Facebook de nuestro curso de Community Manager) pueden ser una oportunidad para emprendedores o compañías de diversos ámbitos (formación, marketing y publicación online, desarrollo software,…) que quieran:

  • Captar usuarios, alumnos o clientes para sus proyectos, productos y servicios.
  • Comercializar los contenidos bajo múltiples fórmulas: venta de publicidad, modelos freemium o de pago, suscripciones…
  • Crear un nuevo proyecto a partir de esta infraestructura de recursos.

Si tú o tú empresa estáis interesados en adquirirlos, ofrecemos su traspaso en propiedad exclusiva. Puedes contactar conmigo en «contacto@digitallearning.es» (por favor entiende que los correos que no vengan suficientemente identificados no vamos a atenderlos). Gracias.

Manuel Cabello (Socio-Director de Digital Learning/Academia Android)

Este es el número de tutoriales publicados:

Pincha en los textos de los contadores de Tutoriales publicados, Premium o Series de tutoriales para tener un detalle de las publicaciones que comprenden.

Desde hace unos meses, todos los contenidos, incluidos los Premium, son accesibles libre y gratuitamente.

  • Premium
  • Acceso libre
130
Acceso libre
126
Premium

Algunos datos sobre los contenidos que hemos publicado hasta la fecha:

74
Videos
61
Proyectos descargables
contacto[arroba]digitallearning.es

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

Post Series: Hilo principal y tareas en background

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:

Descargar