Handler

Gestion des opérations asynchrones avec Handler

Ce site ne sera plus alimenté de contenu après août 2014. Tous les nouveaux articles seront redigés pour www.waitingforcode.com

Dans l'article consacré à l'AsyncTask dans Android on a abordé la possibilité de gérer les tâches asynchrones via Handlers. Ici on se focalisera plus sur cette approche.

Pour gérer les tâches asynchrones on peut aussi utiliser des Handler. L'implémentation est aussi simple que dans le cas des AsyncTask mais elle permet plus de choses. On peut par exemple exécuter une tâche immédiatement, au bout d'un certain temps ou à un moment précis dans le futur (méthodes : post(), postDelayed(), postAtTime()). Dans notre exemple, utilisé pour soumettre les erreurs de l'application au web service adéquat, on va utilise le cas le plus simple : envoi immédiat :

 
public class Logger {
    private final static String LOG_TAG = Logger.class.getName();
    private static Map> messages;
    private static Activity activity;
    private static Handler handler;
    // ...
    public static void sendPending() {
        if (messages != null && activity != null && messages.size() > 0) {
            if (handler == null) handler = new Handler();
            Runnable runnable = new Runnable() {
                 @Override
                 public void run() {
                     handler.post(new Runnable() {
                	     @Override
                	     public void run() {
                             try {
                                 Log.d(LOG_TAG, "Sending errors to web service : "+messages);
                                 LoggerClientREST loggerClientREST = new LoggerClientREST();
                                 loggerClientREST.setActivity(activity);
                                 loggerClientREST.sendMessages(messages);
                             } catch (Exception e) {
                                 Log.e(LOG_TAG, " An error occurred on generating message to log", e);
                             } finally {
                                 messages = null;	
                            }
                         }
                     });
	             }
	        };
            new Thread(runnable).start();
        }
    }
}

Le code est simple. Au début on implémente Runnable qui poste la tâche à exécuter. A la fin on crée et démarre un nouveau Thread avec l'action appropriée.

Expliquer la différence avec AsyncTask

Bartosz KONIECZNY Tâches asynchrones

Une question ? Une remarque ?

*

*

Moi

Développeur d'applications Internet et journaliste passionné par l'adjectif français. Un aigle polonais orienté vers la progression, volant très haut et écoutant du zouk après les matches du foot français.

Vous appréciez mon travail ?

Pour contribuer au développement de ce site, ou pour remercier pour des articles rédigés, vous pouvez faire un don.

Un conseil Android

Afficher les logs sous Android.

Les logs d'Android s'avèrent très utiles lors du développement de notre application. La commande suivante permet de les afficher rapidement (exemple issu du Cygwin) : cd /cygdrive/c/Program\ Files\ \(x86\)/Android/android-sdk/platform-tools/ ./adb.exe logcat