Propriété de Albiri Sigue
customer 27921 at Fri Mar 11 19:19:45 +0100 2011
Chapitre 15
Utilisation des threads 167
● d’appeler des méthodes pour que des traitements s’effectuent dans le thread de l’interface.
AsyncTask, généricité et paramètres variables
La création d’une sous-classe d’AsyncTask n’est pas aussi simple que, par exemple,
l’implémentation de l’interface Runnable car AsyncTask est une classe générique ; vous
devez donc lui indiquer trois types de données :
● Le type de l’information qui est nécessaire pour le traitement de la tâche (les URL à
télécharger, par exemple).
● Le type de l’information qui est passée à la tâche pour indiquer sa progression.
● Le type de l’information qui est passée au code après la tâche lorsque celle-ci s’est
terminée.
En outre, les deux premiers types sont, en réalité, utilisés avec des paramètres variables, ce
qui signifie que votre sous-classe d’AsyncTask les utilise via des tableaux.
Tout cela devrait devenir plus clair à l’étude d’un exemple.
Les étapes d’AsyncTask
Pour parvenir à vos fins, vous pouvez redéfinir quatre méthodes d’AsyncTask.
La seule que vous devez redéfinir pour que votre classe soit utilisable s’appelle doInBackground(). Elle sera appelée par AsyncTask dans un thread en arrière-plan et peut
s’exécuter aussi longtemps qu’il le faut pour accomplir l’opération nécessaire à cette tâche
spécifique. Cependant, n’oubliez pas que les tâches doivent avoir une fin – il est déconseillé
d’utiliser AsyncTask pour réaliser une boucle infinie.
La méthode doInBackground() recevra en paramètre un tableau variable contenant des
éléments du premier des trois types mentionnés ci-dessus – les type des données nécessaires au traitement de la tâche. Si la mission de cette tâche consiste, par exemple, à télécharger un ensemble d’URL, doInBackground() recevra donc un tableau contenant toutes
ces URL.
Cette méthode doit renvoyer une valeur du troisième type de données mentionné – le
résultat de l’opération en arrière-plan.
Vous pouvez également redéfinir onPreExecute(), qui est appelée à partir du thread de
l’interface utilisateur avant que le thread en arrière-plan n’exécute doInBackground().
Dans cette méthode, vous pourriez par exemple initialiser une ProgressBar ou tout autre
indicateur du début du traitement.
De même, vous pouvez redéfinir onPostExecute(), qui est appelée à partir du thread de
l’interface graphique lorsque doInBackground() s’est terminée. Cette méthode reçoit en
paramètre la valeur renvoyée par doInBackground() (un indicateur de succès ou d’échec,
Livre Android.book Page 167 Dimanche, 8. novembre 2009 12:23 12
Précédent

- 182/391

Suivant