Je veux utiliser un AsyncTask
dans mon application, mais j'ai du mal à trouver un extrait de code avec une explication simple de la façon dont les choses fonctionnent. Je veux juste quelque chose pour m'aider à me remettre rapidement à niveau sans avoir à parcourir les documentation ou beaucoup de questions/réponses.
AsyncTask
est l'un des moyens les plus simples d'implémenter le parallélisme dans Android sans avoir à traiter avec des méthodes plus complexes comme Threads. Bien qu'il offre un niveau de parallélisme de base avec le thread d'interface utilisateur, il ne doit pas être utilisé pour des opérations plus longues (de, disons, pas plus de 2 secondes).
AsyncTask a quatre méthodes
onPreExecute()
doInBackground()
onProgressUpdate()
onPostExecute()
où doInBackground()
est le plus important car c'est là que les calculs en arrière-plan sont effectués.
Voici un aperçu du code squelettique avec des explications:
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
}
}
}
Voici un diagramme pour expliquer où vont tous les paramètres et types: