AsyncTask sous Android

Tutoriels Android

Bards of the Earth

Nouvel album de métal symphonique en ligne ! A écouter ici !

Implémenter une AsyncTask sous Android


Note


Une AsyncTask est ce qu'on appelle un UI Thread. Cela permet d'effectuer un traitement en arrière plan sur une application Android sans ralentir la navigation, et de mettre à jour l'interface de l'application en fin de traitement.

Par exemple: je veux afficher dans une activité une liste de personnes contenue dans une base de données.
L'asyncTask a alors toute son utilité:

  • J'affiche mon activité
  • Je lance une AsyncTask qui:
    • Récupère les personnes de la base
    • Affiche la liste une fois les personnes récupérées
Voici ci-dessous un code générique à utiliser pour créer une AsyncTask. Pour bien structurer votre projet, je vous conseille de créer un package à part, contenant les diverses AsyncTask que vous utiliserez.

Code source


Comment appeler et exécuter une AsyncTask:

AsyncTaskExample asyncTaskExample = new AsyncTaskExample(NomActivité.this);
asyncTaskExample.execute();

Code générique d'une AsyncTask:

package packagename;

import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;

 /**
 * Exemple d'AsynTask générique.
 * @author François http://www.francoiscolin.fr/
 *
 */
public class AsyncTaskExample extends AsyncTask<Void, Void, Boolean> {
    
    // On a besoin du contexte pour replacer l'AsyncTask
    private Context context;
    // On récupère l'activité d'appel, au cas où besoin dans le traitement
    private Activity activity;
    
    /**
     * Constructeur de l'asyncTask.
     * @param context
     */
    public AsyncTaskExample(Activity activity) {
        this.context = activity.getApplicationContext();
        this.activity = activity;
    }
    
    
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        /*
         * Cette fonction contiendra le code exécuté au préalable, par exemple:
         *  -Affichage d'une ProgressBar 
         *      =rond qui tourne pour indiquer une attente
         *      =Barre de progression
         *  -...
         */
    }

    @Override
    protected Boolean doInBackground(Void... arg0) {
        return null;
        /*
         * Ici, le code qui doit être exécuté dans l'AsyncTask, par exemple:
         *  -Une requête de base de données
         *  -Un appel à un Web Service
         *  -...
         */
    }
    
    @Override
    protected void onPostExecute(final Boolean success) {
        /*
         * Ici, le code exécuté une fois le traitement terminé, par exemple:
         *  -Mise à jour de l'affichage
         *  -Affichage d'une pop-up indiquant la fin du traitement
         *  -Désactivation de la ProgressBar
         *  -...
         */
    }

    @Override
    protected void onCancelled() {
        
    }

}

Cela a été utile?