Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Android - Asynctask
#1
Todos los componentes de una aplicación Android, tanto las actividades, los servicios [sí, también los servicios], o los broadcast receivers se ejecutan en el mismo hilo de ejecución, el llamado hilo principal, main thread o GUI thread, que como éste último nombre indica también es el hilo donde se ejecutan todas las operaciones que gestionan la interfaz de usuario de la aplicación.

Es por ello, que cualquier operación larga o costosa que realicemos en este hilo va a bloquear la ejecución del resto de componentes de la aplicación y por supuesto también la interfaz, produciendo al usuario un efecto evidente de lentitud, bloqueo, o mal funcionamiento en general, algo que deberíamos evitar a toda costa.

Incluso puede ser peor, dado que Android monitoriza las operaciones realizadas en el hilo principal y detecta aquellas que superen los 5 segundos, en cuyo caso se muestra el famoso mensaje de “Application Not Responding” (ANR) y el usuario debe decidir entre forzar el cierre de la aplicación o esperar a que termine.

Para evitarlo, utilizamos procesos en segundo plano. En este caso, os mostrare como lanzar un proceso en segundo plano en android, usando asynctask.

  1. Simplifica la programación de hilos.
  2. Facilita el acceso a los controles de la interfaz de usuario.
  3. Previene la sobrecarga de hilos.
  4. El método doInBackground() ejecuta las tareas en segundo plano.
  5. El método onPostExecute() implementa el acceso a los controles de la interfaz de usuario una vez que ha finalizado el hilo.

Código:
public class Tarea extends AsyncTask<String,  Integer ,  Boolean> {
   //El primer valor de la clase corresponde al dato que le pasamos
   //al hilo para que lo use en donInBackground
   @Override
   protected Boolean doInBackground(String...  params)  {
      //Manda el valor al metodo onProgressUpdate
      publishProgress(valor);
      //Valor que se manda al acabar. Coincide con el ultimo valor escogido
      //en la clase
      return true;
   }
   @Override
   protected void onProgressUpdate(Integer ...  values) {
      //Recibe el valor del publishProgress
      //El tipo de dato lo determina el segundo valor de la clase
   }
   @Override
   protected void onPreExecute()  {
      //Pasos a realizar antes de que se lance la tarea en segundo plano
   }
   @Override
   protected void onPostExecute(Boolean result)  {
      //Recibe el valor al acabar doInBackground
   }
   @Override
   protected void onCancelled()  {
      //Se llega al cancelar el hilo
   }
}
#2
Los hilos con asynctask son muy faciles de usar aunque no tienen tanta potencia como los otros. Para principiantes es una buena opcion.


Posibles temas similares...
Tema Autor Respuestas Vistas Último mensaje
  Google Assistant 0.1.170902043 (nodpi) (Android 6.0+) skions 2 53 20-10-2018, 06:07 PM
Último mensaje: fercho alb
  7 de las apps que más recursos consumen en Android Jvh_22 7 359 23-04-2018, 06:55 PM
Último mensaje: angelismo
  Como actualizar mi sistema operativo Android de mi tablet Jalus 20 656 07-03-2018, 08:17 PM
Último mensaje: manuelxd1010
  DuOS: El nuevo emulador Android para Windows jcifuentes 8 414 01-12-2017, 10:13 PM
Último mensaje: santivip12
  La mayoría de las aplicaciones que ofrecen una VPN en Android poseen malware Sebaexeq 21 1,168 16-04-2017, 06:30 PM
Último mensaje: Kevinn_15
  Android Auto se actualiza con soporte para comandos de voz con “Ok Google” Sebaexeq 2 359 03-12-2016, 04:21 AM
Último mensaje: Lob3zNo
Información Malware afecta a varios usuarios de Android avsr1998 1 299 03-12-2016, 03:58 AM
Último mensaje: Lob3zNo
  Corre el rumor de que Apple liberará iMessage para Android diana1981 4 466 08-11-2016, 02:28 PM
Último mensaje: jcifuentes
  Google Maps incorpora comandos de voz en Android Sebaexeq 2 360 03-10-2016, 02:20 PM
Último mensaje: cfv
  Android Wear suma un Play Store pero la versión final llegará recién en el 2017 Sebaexeq 0 327 01-10-2016, 05:08 PM
Último mensaje: Sebaexeq



Usuarios navegando en este tema: 1 invitado(s)