studio - Ejemplo y explicación de Android AsyncTask
implement asynctask android (1)
Esta pregunta ya tiene una respuesta aquí:
- Usando AsyncTask 1 respuesta
Quiero usar una
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 volver a la velocidad rápidamente sin tener que leer la
documentation
o muchas preguntas y respuestas de nuevo.
AsyncTask
es una de las formas más fáciles de implementar 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 hilo de la interfaz de usuario, no debe usarse para operaciones más largas (por ejemplo, no más de 2 segundos).
AsyncTask tiene cuatro métodos
-
onPreExecute()
-
doInBackground()
-
onProgressUpdate()
-
onPostExecute()
donde
doInBackground()
es el más importante, ya que es donde se realizan los cálculos en segundo plano.
Código:
Aquí hay un resumen del código esquelético 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, Progress, Result>.
// 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<String, Integer, String> {
// 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
}
}
}
Diagrama de flujo:
Aquí hay un diagrama para ayudar a explicar a dónde van todos los parámetros y tipos:
Otros enlaces útiles:
- ¿Qué argumentos se pasan a AsyncTask <arg1, arg2, arg3>?
- Tutorial Slidenerd Android AsyncTask: Tutorial de Android para principiantes
- Comprender AsyncTask: una vez y para siempre
- Manejo de AsyncTask y Orientación de pantalla
- Cómo pasar múltiples parámetros a AsynkTask
- cómo pasar dos tipos de datos diferentes a AsyncTask, Android