Propriété de Albiri Sigue
customer 27921 at Fri Mar 11 19:19:45 +0100 2011
166 L’art du développement Android
Runnable pour qu’il s’exécute dans le thread de l’interface si vous n’y êtes pas déjà. Dans
le cas contraire, elle appelle immédiatement le Runnable. Vous disposez ainsi du meilleur
des deux mondes : aucun délai si vous êtes dans le thread de l’interface et aucun problème
si vous n’y êtes pas.
Désynchronisation
Avec AsyncTask, Android 1.5 a introduit une nouvelle façon de concevoir les opérations
en arrière-plan. Grâce à cette seule classe bien conçue, Android s’occupera du découpage
du travail entre le thread de l’interface et un thread en arrière-plan. En outre, il allouera et
désallouera lui-même le thread en arrière-plan et gérera une petite file de tâches, ce qui
accentue encore le côté "prêt à l’emploi" d’AsyncTask.
La théorie
Il existe un dicton bien connu des vendeurs : "Lorsqu’un client achète un foret de 12 mm
dans un magasin, il ne veut pas un foret de 13 mm : il veut percer des trous de 13 mm."
Les magasins ne peuvent pas vendre les trous, ils vendent donc les outils (des perceuses et
des forets) qui facilitent la création des trous.
De même, les développeurs Android qui se battent avec la gestion des threads en arrièreplan ne veulent pas vraiment des threads en arrière-plan : ils souhaitent qu’un certain
travail s’effectue en dehors du thread de l’interface, afin que les utilisateurs ne soient pas
bloqués et que les activités ne reçoivent pas la redoutable erreur "application not responding" (ANR). Bien qu’Android ne puisse pas, par magie, faire en sorte qu’un traitement ne
consomme pas le temps alloué au thread de l’interface, il peut offrir des techniques
permettant de faciliter et de rendre plus transparentes ces opérations en arrière-plan.
AsyncTask en est un exemple.
Pour utiliser AsyncTask, il faut :
● créer une sous-classe d’AsyncTask, généralement sous la forme d’une classe interne à
celle qui utilise la tâche (une activité, par exemple) ;
● redéfinir une ou plusieurs méthodes d’AsyncTask pour réaliser le travail en arrièreplan ainsi que toute opération associée à la tâche et qui doit s’effectuer dans le thread
de l’interface (la mise à jour de la progression, par exemple) ;
● le moment venu, créer une instance de la sous-classe d’AsyncTask et appeler
execute() pour qu’elle commence son travail.
Vous n’avez pas besoin :
● de créer votre propre thread en arrière-plan ;
● de terminer ce thread au moment voulu ;
Livre Android.book Page 166 Dimanche, 8. novembre 2009 12:23 12
Précédent

- 181/391

Suivant