Ejemplo y explicación de Android AsyncTask

Deseo utilizar AsyncTask en mi aplicación, pero tengo problemas para encontrar un fragmento de código con una explicación simple de cómo funcionan las cosas. Solo quiero algo que me ayude a recuperarme rápidamente sin tener que revisar la documentación o hacer muchas preguntas y respuestas de nuevo.

AsyncTask es una de las formas más sencillas de implementar el paralelismo en Android sin tener que lidiar con métodos más complejos como Threads. Aunque ofrece un nivel básico de paralelismo con el subproceso UI, no debe usarse para operaciones más largas (de, digamos, no más de 2 segundos).

AsyncTask tiene cuatro métodos para hacer la tarea

  • onPreExecute()
  • doInBackground()
  • onProgressUpdate()
  • onPostExecute()

donde doInBackground() es el más importante ya que es donde se realizan cálculos de fondo.

Código:

Aquí hay un esquema esquelético del código con explicaciones:

 public class AsyncTaskTestActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // This starts the AsyncTask // Doesn't need to be in onCreate() new MyTask().execute("my string parameter"); } // Here is the AsyncTask class: // // AsyncTask. // Params – the type (Object/primitive) you pass to the AsyncTask from .execute() // Progress – the type that gets passed to onProgressUpdate() // Result – the type returns from doInBackground() // Any of them can be String, Integer, Void, etc. private class MyTask extends AsyncTask { // Runs in UI before background thread is called @Override protected void onPreExecute() { super.onPreExecute(); // Do something like display a progress bar } // This is run in a background thread @Override protected String doInBackground(String... params) { // get the string from params, which is an array String myString = params[0]; // Do something that takes a long time, for example: for (int i = 0; i <= 100; i++) { // Do things // Call this to update your progress publishProgress(i); } return "this string is passed to onPostExecute"; } // This is called from background thread but runs in UI @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); // Do things like update the progress bar } // This runs in UI when background thread finishes @Override protected void onPostExecute(String result) { super.onPostExecute(result); // Do things like hide the progress bar or change a TextView } } } 

Diagtwig de flujo:

Aquí hay un diagtwig para ayudar a explicar dónde van todos los parámetros y tipos:

Flujo AsyncTask

Otros enlaces útiles:

  • ¿Qué argumentos se pasan a AsyncTask ?
  • Slidenerd Android AsyncTask Tutorial: Android Tutorial para principiantes
  • Android: Por qué, cuándo y cómo usar AsyncTask con el ejemplo
  • Comprensión de AsyncTask: una vez y para siempre
  • Tratar con AsyncTask y la orientación de la pantalla
  • Cómo pasar múltiples parámetros a AsynkTask
  • cómo pasar dos tipos de datos diferentes a AsyncTask, Android