Blog
La clase AsyncTask en Android nos permite ejecutar distintas tareas en segundo plano, esto nos da la posibilidad de seguir con la ejecución de nuestra aplicación sin tener que esperar a que se termine de ejecutar una determinada instrucción.
En este tutorial aprenderemos a utilizarla con un ejemplo muy sencillo.
¿Cómo crear un AsyncTask en Android?
Para crear nuestro propio hilo de ejecución en Android debemos crear una clase que herede de AsyncTask. Esta clase nos da la posibilidad de implementar varios métodos:
onPreExecute: Aquí va todo el código que se ejecuta antes de comenzar el hilo.
doInBackground(Params…): Aquí va el código que se desea ejecutar en segundo plano.
onProgressUpdate(Progress…): Este método es invocado después de llamar a publishProgress(Progress…). Es utilizado para crear barras de progreso.
onPostExecute(Result): Aquí va el código que es ejecutado una vez que termina el hilo, el parámetro que recibe es el resultado de la función doInBackground(Params…).
De los métodos mencionados el único obligatorio es el doInBackground. Una vez que entendimos cuales son los componentes principales podemos crear nuestra AsyncTask:
import android.content.Context; import android.os.AsyncTask; import android.widget.Toast; public class MyAsyncTask extends AsyncTask<String, Void, String> { private Context context; public MyAsyncTask(Context context) { this.context = context; } @Override protected String doInBackground(String... params) { try { Thread.sleep(5000); return params[0]; } catch (InterruptedException e) { return "Ha ocurrido un error."; } } @Override protected void onPostExecute(String result) { Toast.makeText(context, result, Toast.LENGTH_LONG).show(); } }
Esta AsyncTask es muy simple. Lo único que hace es dormirse 5 segundos y luego mostrar un resultado. Un detalle importante a mencionar es que el tipo genérico indicado en AsyncTask no necesariamente debe ser un string.
Para ejecutar esta tarea debemos hacer:
new MyAsyncTask(getApplicationContext()).execute("Tarea ejecutada correctamente.");
Donde el parámetro pasado al método execute es el resultado que se mostrará en caso de ejecutarse correctamente. A esta función también es posible enviarle más de un parámetro, la única condición es que todos deben ser del mismo tipo.
Espero que les haya gustado el ejemplo y ya saben que si tienen alguna duda al respecto no duden en preguntar.