Bonjour à tous ! Nouvelle semaine, nouvel article. Aujourd’hui je vais aborder les AsyncTask en Kotlin. Dans cet article nous verrons la signification d’une AsyncTask , je vous présenterai comment la mettre en place en précisant les méthodes à surcharger.
Dans cet article, je vais parler de la notion de thread. Un thread c’est un processus léger, on dit également que c’est une unité de traitement. Il est souvent utilisé pour la programmation parallèle, lorsqu’on exécute plusieurs tâches en même temps.
Qu’est-ce qu’une AsyncTask ?
- C’est une tâche qui s’exécute de manière asynchrone indépendante du thread principal. Similitude avec la notion de Thread.
- Une AsyncTask est souvent dédiée aux traitements longs pour éviter de ralentir le thread principal qui s’occupe de l’interface graphique.
- Une AsyncTask peut interagir avec l’interface graphique et communiquer avec le thread principal.
- Une tache asynchrone s’exécutera en parallèle des autres thread de façons différées. La tâche n’attend pas que les autres taches soient terminées pour se terminer (asynchrone).
La mise en place d’une AsyncTask
Dans l’article qui va suivre, je vais présenter vous des parties de code repris de l’application que j’ai créés spécialement pour l’article. L’application possède une interface avec un bouton, une imageView et une barre de progression. Lorsque l’utilisateur clique sur le bouton, l’application va venir lancer l’AsyncTask , faire évoluer la barre de progression avant d’afficher une image à l’écran.
Je pense que ça va être plus simple si je vous montre l’aperçut de l’application.
Prérequis pour une AsyncTask
Pour mettre en place une AsyncTask, il est nécessaire de créer une classe à part entière. Vous avez deux choix soit vous créer votre nouveau fichier avec votre classe. Soit vous l’englobez dans la classe de votre mainActivity. À noter si vous choisissez la seconde option je vous recommande de placer le mot-clé “inner” devant votre nouvelle classe afin qu’elle puisse accéder aux éléments de la classe englobante.
À partir de cette classe, héritez là de la classe AsyncTask (voir l’exemple, ci-dessous) :
Vous pouvez faire le choix de modifier les différents types entre “<>”. Les méthodes qui vont suivre seront alors quelque peu modifiées. Le premier paramètre va correspondre au type de la variable d’entrer de votre AsyncTask. Vous pouvez passer une variable externe à votre AsyncTask avec la méthode “execute “dans votre mainActivity (Nous la verrons plus tard dans la suite de l’article). Le deuxième paramètre va définir le type d’une variable qui va évoluer pendant l’exécution de la tâche asynchrone. Le dernier va correspondre au type de la valeur de retour, notre AsyncTask dans la configuration ci-dessus va nous renvoyer un String.
Hériter une classe nécessite, c’est surcharger ces méthodes. C’est-à-dire les redéfinir et leur implémenter du code. Les méthodes à surcharger sont :
La méthode onPreExecute
La méthode onPreExecute est la première méthode à être appelé lorsqu’on lance l’AsyncTask. On l’utilise souvent pour initialiser nos composants, nos objets ou bien nos fonctions. Elle doit être surchargée même si vous en n’avez pas l’utilité.
La méthode doInBackground
La fonction doInBackground est lancée à la suite de la méthode onPreExecute. C’est le cœur de notre tâche, elle est utilisée pour les traitements longs. Les instructions de cette méthode vont s’exécuter dans un nouveau thread.
Le type du paramètre “params” de la méthode doInBackground, doit forcément correspondre au premier type de votre AsyncTask (“valeur d’entrée”). C’est avec cette variable qu’on va pouvoir interagir avec la valeur qu’on a mise en paramètre lorsqu’on a lancé la tache asynchrone (La fonction “execute” dans le mainActivity dans la suite de l’article).
Son type de retour doit forcément correspondre au dernier type de votre AsyncTask (“valeur sortante”). À la fin, de cette méthode la valeur de retour est transmise à la méthode onPostExecute qui est la dernière à s’exécuter.
La méthode onProgressUpdate
Cette méthode va s’exécuter en parallèle de la fonction doInBackground dans le thread principal (mainActivity). Lorsque la fonction publishProgress sera appelée dans la méthode doInBackground , elle commencera et se terminera au même instant que celle-ci.
Le type du paramètre “value” de la méthode onProgressUpdate, doit forcément correspondre au second type de votre AsyncTask (“valeur variante”). La variable va varier en fonction de la progression de la méthode doInBackground . Elle peut être utile dans une application, par exemple pour réaliser une barre de progression qui affiche le pourcentage de chargement.
La méthode onPostExecute
C’est la dernière à s’exécuter, elle se lance après la méthode doInBackground. La méthode onPostExecute vient clôturer l’exécution de l’AsyncTask.
La méthode prend en paramètre la valeur “result” qui est transmise par la fonction doInBackground . Son type doit correspondre au type renvoyé par la méthode doInBackground. Il doit correspondre également au dernier type de l’AsyncTask (“valeur sortante”).
L’appel de AsyncTask dans notre Activity
pour appeller l’AsyncTask dans notre activity, il faut créer une instance de notre classe c’est-à -dire initialiser notre objet. Une fois l’instance créée il faut appeler la méthode “execute” de notre instance. On peut lui passer en paramètre une variable avec laquelle notre l’AsyncTask pourra interagir.
Pour aller plus loin
Il existe les librairies Glide, Picasso pour charger des images sur le net. Ces librairies peuvent être utiles, si vous avez comme moi une application qui vient afficher des images à l’écran.
La librairie Anko que je vous avais déjà introduite dans un précédent article “AlertDialog en Kotlin”, peut-être utilisé avec les AsyncTask et ainsi simplifier et réduire le nombre de lignes de code de votre application.
Merci d’avoir lu ! Maintenant, si vous avez aimé le contenu de l’article, si vous connaissez une personne à qui cet article peut intéresser, n’hésitez pas à le liker et à le partager sur les réseaux sociaux. Si vous souhaitez me faire part de vos remarques, de vos problèmes, de vos suggestions de prochain article ou tout simplement de votre soutien n’hésitez pas à m’en faire part dans les commentaires, je vous en remercie.
Crédit photo : Blickpixel, openClipart-vector
- 6Partages