09.02.2017 Views

creez-des-applications-pour-android

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

5.1 Le travail en arrière-plan<br />

— boolean post(Runnable r) <strong>pour</strong> ajouter r à la queue <strong>des</strong> messages. Il s’exécutera<br />

sur le Thread auquel est rattaché le Handler. La méthode renvoie true si l’objet a<br />

bien été rajouté. De manière alternative, boolean postAtTime(Runnable r, long<br />

uptimeMillis) permet de lancer un Runnable au moment longMillis et boolean<br />

postDelayed(Runnable r, long delayMillis) permet d’ajouter un Runnable à<br />

lancer après un délai de delayMillis.<br />

— boolean sendEmptyMessage(int what) permet d’envoyer un Message simple qui ne<br />

contient que la valeur what, qu’on peut utiliser comme un identifiant. On trouve aussi les<br />

métho<strong>des</strong> boolean sendEmptyMessageAtTime(int what, long uptimeMillis) et<br />

boolean sendEmptyMessageDelayed(int what, long delayMillis).<br />

— Pour pousser un Message complet à la fin de la file <strong>des</strong> messages, utilisez boolean<br />

sendMessage(Message msg). On trouve aussi boolean sendMessageAtTime(Message<br />

msg, long uptimeMillis) et boolean sendMessageDelayed(Message msg, long<br />

delayMillis).<br />

Tous les messages seront reçus dans la méthode de callback void handleMessage(Message<br />

msg) dans le thread auquel est attaché ce Handler.<br />

public class MonHandler extends Handler {<br />

@Override<br />

public void handleMessage(Message msg) {<br />

// Faire quelque chose avec le message<br />

}<br />

}<br />

5.1.2.3 Application : une barre de progression<br />

5.1.2.3.1 Énoncé Une utilisation typique <strong>des</strong> handlers est de les incorporer dans la gestion <strong>des</strong><br />

barres de progression. On va faire une petite application qui ne possède au départ qu’un bouton.<br />

Cliquer <strong>des</strong>sus lance un téléchargement et une boîte de dialogue s’ouvrira. Cette boîte contiendra<br />

une barre de progression qui affichera l’avancement du téléchargement, comme à la figure suivante.<br />

Dès que le téléchargement se termine, la boîte de dialogue se ferme et un Toast indique<br />

que le téléchargement est terminé. Enfin, si l’utilisateur s’impatiente, il peut très bien fermer la<br />

boîte de dialogue avec le bouton ||Retour||.<br />

5.1.2.3.2 Spécifications techniques On va utiliser un ProgressDialog <strong>pour</strong> afficher la<br />

barre de progression. Il s’utilise comme n’importe quelle boîte de dialogue, sauf qu’il faut lui attribuer<br />

un style si on veut qu’il affiche une barre de progression. L’attribution se fait avec la méthode<br />

setProgressStyle(int style) en lui passant le paramètre ProgressDialog.STYLE_HORIZONTAL.<br />

L’état d’avancement sera conservé dans un attribut. Comme on ne sait pas faire de téléchargement,<br />

l’avancement se fera au travers d’une boucle qui augmentera cet attribut. Bien entendu,<br />

on ne fera pas cette boucle dans le thread principal, sinon l’interface graphique sera complètement<br />

bloquée ! Alors on lancera un nouveau thread. On passera par un handler <strong>pour</strong> véhiculer <strong>des</strong><br />

messages. On répartit donc les rôles ainsi :<br />

— Dans le nouveau thread, on calcule l’état d’avancement, puis on l’envoie au handler à l’aide<br />

d’un message.<br />

— Dans le handler, dès qu’on reçoit le message, on met à jour la progression de la barre.<br />

333

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!