Propriété de Albiri Sigue
customer 27921 at Fri Mar 11 19:19:45 +0100 2011
162 L’art du développement Android
Les handlers
Le moyen le plus souple de créer un thread en arrière-plan avec Android consiste à créer
une instance d’une sous-classe de Handler. Vous n’avez besoin que d’un seul objet
Handler par activité et il n’est pas nécessaire de l’enregistrer manuellement ou quoi que
ce soit d’autre – la création de l’instance suffit à l’enregistrer auprès du sous-système de
gestion des threads.
Le thread en arrière-plan peut communiquer avec le Handler, qui effectuera tout son
travail dans le thread de l’interface utilisateur de votre activité. C’est important car les
changements de cette interface – la modification de ses widgets, par exemple – ne doivent
intervenir que dans le thread de l’interface de l’activité.
Vous avez deux possibilités pour communiquer avec le Handler : les messages et les
objets Runnable.
Les messages
Pour envoyer un Message à un Handler, appelez d’abord la méthode obtainMessage()
afin d’extraire l’objet Message du pool. Cette méthode est surchargée pour vous permettre
de créer un Message vide ou des messages contenant des identifiants de messages et des
paramètres. Plus le traitement que doit effectuer le Handler est compliqué, plus il y a de
chances que vous deviez placer des données dans le Message pour aider le Handler à
distinguer les différents événements.
Puis envoyez le Message au Handler en passant par sa file d’attente des messages, à l’aide
de l’une des méthodes de la famille sendMessage...() :
● sendMessage() place immédiatement le message dans la file.
● sendMessageAtFrontOfQueue() place immédiatement le message en tête de file (au
lieu de le mettre à la fin, ce qui est le comportement par défaut). Votre message aura
donc priorité par rapport à tous les autres.
● sendMessageAtTime() place le message dans la file à l’instant indiqué, qui s’exprime
en millisecondes par rapport à l’uptime du système (SystemClock.uptimeMillis()).
● sendMessageDelayed() place le message dans la file après un certain délai, exprimé
en millisecondes.
Pour traiter ces messages, votre Handler doit implémenter la méthode handleMessage(), qui sera appelée pour chaque message qui apparaît dans la file d’attente. C’est là
que le handler peut modifier l’interface utilisateur s’il le souhaite. Cependant, il doit le
faire rapidement car les autres opérations de l’interface sont suspendues tant qu’il n’a pas
terminé.
Livre Android.book Page 162 Dimanche, 8. novembre 2009 12:23 12
customer 27921 at Fri Mar 11 19:19:45 +0100 2011
162 L’art du développement Android
Les handlers
Le moyen le plus souple de créer un thread en arrière-plan avec Android consiste à créer
une instance d’une sous-classe de Handler. Vous n’avez besoin que d’un seul objet
Handler par activité et il n’est pas nécessaire de l’enregistrer manuellement ou quoi que
ce soit d’autre – la création de l’instance suffit à l’enregistrer auprès du sous-système de
gestion des threads.
Le thread en arrière-plan peut communiquer avec le Handler, qui effectuera tout son
travail dans le thread de l’interface utilisateur de votre activité. C’est important car les
changements de cette interface – la modification de ses widgets, par exemple – ne doivent
intervenir que dans le thread de l’interface de l’activité.
Vous avez deux possibilités pour communiquer avec le Handler : les messages et les
objets Runnable.
Les messages
Pour envoyer un Message à un Handler, appelez d’abord la méthode obtainMessage()
afin d’extraire l’objet Message du pool. Cette méthode est surchargée pour vous permettre
de créer un Message vide ou des messages contenant des identifiants de messages et des
paramètres. Plus le traitement que doit effectuer le Handler est compliqué, plus il y a de
chances que vous deviez placer des données dans le Message pour aider le Handler à
distinguer les différents événements.
Puis envoyez le Message au Handler en passant par sa file d’attente des messages, à l’aide
de l’une des méthodes de la famille sendMessage...() :
● sendMessage() place immédiatement le message dans la file.
● sendMessageAtFrontOfQueue() place immédiatement le message en tête de file (au
lieu de le mettre à la fin, ce qui est le comportement par défaut). Votre message aura
donc priorité par rapport à tous les autres.
● sendMessageAtTime() place le message dans la file à l’instant indiqué, qui s’exprime
en millisecondes par rapport à l’uptime du système (SystemClock.uptimeMillis()).
● sendMessageDelayed() place le message dans la file après un certain délai, exprimé
en millisecondes.
Pour traiter ces messages, votre Handler doit implémenter la méthode handleMessage(), qui sera appelée pour chaque message qui apparaît dans la file d’attente. C’est là
que le handler peut modifier l’interface utilisateur s’il le souhaite. Cependant, il doit le
faire rapidement car les autres opérations de l’interface sont suspendues tant qu’il n’a pas
terminé.
Livre Android.book Page 162 Dimanche, 8. novembre 2009 12:23 12
