Découvrir le développement d'applications avec Android 5

Mettre en pratique une AsyncTask

Testez gratuitement nos 1247 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Vous allez mettre en pratique une AsyncTask de A à Z. Ainsi, vous allez vous familiariser avec son utilisation.
09:14

Transcription

Nous avons prérempli ce CacheChecker mais pour l'instant il ne fait rien. Donc nous allons essayer de le compléter. Ce que nous pourrions faire par exemple, ce serait faire une boucle qui parcourt chacun de ses paramètres, chacune des chaines de caractères, afficher un message dans la console, pour dire qu'il a commencé à travailler, simuler un travail en faisant attendre le thread pendant une ou deux secondes et ensuite, marqué qu'il a terminé. Donc je vais faire... ... un foreach pour chaque... ... param ... dans la liste de params... pour chaque paramètre que j'ai reçu... je vais dire... log... point... i... Donc pour faire des log vous avez plusieurs, i pour info, d pour débug, e pour error etc. Nous on va faire de l'info. Pour les logs, il faut d'abord mettre... un tag, qui permettra ensuite de filtrer... les logs, et ensuite le message que vous voulez mettre donc... Starting... et on va lui passer... param... avec deux points...voilà... comme ça ce sera joli... je vais garder... commander pour dupliquer la ligne... Ended... param.... et au milieu, je vais faire un thread... point... sleep... qui permet de mettre le thread en pause pendant un certain temps.z Donc on va mettre 2 000 millisecondes donc ça fait 2 secondes... et automatiquement, dès que vous faites un sleep, il faut l'entourer avec un try/catch... sinon... il ne voudra pas compiler... Alors entre parenthèses, le thread sleep c'est quelque chose à utiliser que pour des tests. Ne mettez pas dans des codes de production, parce que ça met le thread en pause, et donc du coup, il ne fait rien pendant 2 secondes. Donc ça n'a pas beaucoup d'intérêt. C'est rare d'avoir vraiment besoin de ça, sauf si il y a vraiment des choses particulières, mais normalement il faudrait pas trop s'en servir, et surtout et surtout ne jamais se servir de ça sur le thread principal, bien entendu. Là je suis en thread secondaire, puisque je suis dans le doInBackground. Voilà pour ça, donc si je lance... mon application... je devrais normalement... on voit ici... dans mes logs... starting data 1... Ended data 1, starting data 2, ended data 2... Donc on voit qu'il travaille. il est bien en arrière-plan je ne vous ai pas montré, l'interface est restée fluide, ça ne me gêne absolument pas, ce qu'il se passe. Maintenant ce que j'aimerais, c'est que ça mette à jour ce label avec les infos de progrès. Pour arriver à faire ça, il faudra qu'ici on ait une variable qui représente ce label, cet objet graphique, qu'on va pouvoir manipuler uniquement depuis les méthodes du thread principal. On va ajouter... un constructeur... qui recevra un TextView... qu'on va appeler...euh... « Status »... « label » ... J'écris une variable locale... ui_Status ... Label est égal à StatusLabel... Donc là, comme elle n'existe pas, il va me proposer en faisant ALT Entrée de créer un champ... voilà... ça m'évite à moi de le créer... Donc il me crée automatiquement mon TextView... et je le remplis au constructeur. Alors pour tenir au courant de l'avancement, la première qu'on peut faire, ce serait déjà dans le onPreExecute dire uiStatusLabel... setText... par exemple, on va mettre... LoadingStarted... CacheLoadingStarted... OK... Et une fois qu'on aura terminé, onPostExecute... On va dire uiStatusLabel... setText... CacheLoadingFinished.... Ok, donc on a déjà fait le début et la fin. On n'a pas fait encore le progrès, donc si je lance déjà mon application, Là, il voudra pas compiler puisque forcément ici, le constructeur ne marche plus. Donc vous voyez, il me le met en rouge. Voilà. Voyez, j'ai rajouté un constructeur, qui recevait le TextView, donc forcément il doit recevoir un TextView qui servira de StatusLabel. Nous, on va lui passer le uiWelcomeLabel, c'est celui qui est en rose, en haut. Et je vais faire Control+R, pour lancer mon application dans le simulateur. CacheLoadingStarted... donc là il est en train de tous les charger on ne voit pas trop ce qui se passe car on n'a pas encore géré le progrès, mais normalement, on aura à la fin... Voilà : CacheLoadingFinished à la fin du troisième, il l'a bien mis à jour. Donc on a fait quelque chose en tâche de fond tout en mettant à jour l'interface graphique avant et après la tâche. Si maintenant on veut gérer la notion de progrès, ce que je vais faire, je vais créer... un entier... handled... param... count... est égal à 0... à chaque tour, je vais dire que, j'ai fini de gérer, est égal à handledParamCount + 1 ... et là, on va calculer le progrès en pourcentage, donc par exemple... progress... égal... alors ça être un petit peu tordu comme calcul, puisque en divisant 2 entiers on perd les noms après la virgule, alors on va dire, le nombre... de paramètres gérés divisés par... le nombre total de paramètres... point, length... Je vais obligé de mettre au moins un des deux en float, sinon il va me perdre les chiffres après la virgule... le résultat, je multiplie par 100... et tout ça, il faut que je le caste en entier... puisque le résultat final, il faut vraiment que ce soit un entier sinon ça ne marchera pas. Voilà, donc là j'ai mon progrès, er ce que je vais faire, je vais dire : publishProgress, donc publishProgress, c'est une méthode que vous appelez en arrière-plan, en lui passant les informations de progrès moi je vais lui en passer qu'une seule. Normalement on pourra en passer plusieurs si on le souhaitait, si on a plusieurs traitements en parallèle. Moi je ne lui en passe qu'une seule. Et on est en arrière-plan il va prendre ce progrès et le faire passer dans cette fonction en paramètre. Voyez, il va me recréer un tableau d'entier, avec les différentes valeurs qu'il a reçu, et cette fois-ci on sera au premier plan Donc ça veut dire je peux dire uiStatusLabel set... Text... et dire donc values je sais que j'aurai toujours, une valeur à l'intérieur... plus... et là, on va dire % ... et on va lancer notre application normalement ça devrait marcher. Control+R... Voilà... 33%... 66%... CacheLoadingFinished, donc à la fin de chaque tour, il a mis à jour le progrès et il a publié. Donc ça nous permet depuis l'arrière-plan d'envoyer des informations au premier plan. Les dernières choses qu'il va falloir savoir sur l'Async Task, c'est qu'elle est directement liée au contexte dans lequel vous l'avez créée. On ne s'en rend pas compte, c'est le piège justement avec l'AsyncTask, mais elle est liée directement à la Main activity, puisqu'on l'a lancée depuis la Main activity. Alors si on n'est pas prudent, on peut très vite se retrouver avec des fuites mémoire, pour plusieurs raisons, par exemple si l'activité doit être supprimée, mais que la tâche n'est pas terminée, bien l'activité ne sera jamais supprimée tant que la tâche n'aura pas finie. Si vous avez beaucoup de traitements, que c'est très long, vous quittez votre activité pour faire autre chose, bien le système va devoir garder la tâche en cours, c'est pas tellement le CacheChecker le problème, c'est que le CacheChecker est accroché à cette activité, qui potentiellement consomme énormément de ressources, On est sur plusieurs nouveaux écrans depuis peut-être, l'utilisateur a navigué dans plusieurs écrans et on continue à utiliser l'ancienne activité, à la garder en mémoire pour rien. Donc là, une des choses à faire par exemple, c'est de vérifier si l'activité n'a pas été... ...annulée entre-temps. Parce que quand vous sortirez de l'activité, il va annuler automatiquement votre tâche et il faut au moins ne plus faire de nouveau traitement, pour essayer de sortir le plus rapidement de cette fonction lorsque vous aurez terminé. Voilà, l'Async Task c'est quelque chose de très utile pour des traitements de fond maintenant, on va voir dans un autre chapitre si c'est uniquement pour faire du téléchargement de données, il y a des outils beaucoup plus ciblés et beaucoup plus simples à mettre en place, pour télécharger des données sur Internet.

Découvrir le développement d'applications avec Android 5

Développez des applications mobiles pour Android. Créez un projet de A à Z sous Android Studio, de l’installation du kit de développement, jusqu’à sa publication sur le Play Store.

3h17 (39 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Android Android 5
Spécial abonnés
Date de parution :17 mars 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !