Ce lab Android démontre l'utilisation des threads et des tâches asynchrones pour maintenir une interface utilisateur fluide pendant l'exécution de processus longs.
L'interface est définie dans un fichier XML utilisant un LinearLayout avec une orientation verticale. Elle se compose des éléments suivants :
- Affichage du Statut (TextView) : Situé en haut de l'écran, il informe l'utilisateur sur l'état actuel de l'application (prêt, en cours, terminé).
- Barre de Progression (ProgressBar) : Une barre horizontale, invisible par défaut, qui devient visible pour illustrer l'avancement des calculs ou du chargement.
- Image d'aperçu (ImageView) : Un composant destiné à afficher l'icône de l'application une fois le chargement simulé terminé.
- Trois Boutons d'action :
boutLoadThread: Déclenche le processus de chargement via un Thread Java standard.btnCalculAsyn: Exécute un calcul lourd en utilisant la classe AsyncTask.btToast: Permet de vérifier que l'interface reste interactive pendant les opérations de fond.
Le code Java met en œuvre deux méthodes distinctes pour la gestion des opérations en arrière-plan.
Cette approche sépare strictement le travail de fond et la mise à jour graphique :
- Action : Lors du clic sur le bouton, un nouveau Thread (fil d'exécution secondaire) est créé.
- Travail de fond : Le thread simule une attente de 4 secondes via la méthode
sleep, puis procède au décodage d'une image. - Le Pont (Handler) : Étant donné qu'un thread secondaire ne peut pas modifier directement l'interface utilisateur, l'objet
mainHandler.post(...)est utilisé pour envoyer les instructions de mise à jour au fil principal (UI Thread).
L'AsyncTask est une structure spécialisée d'Android qui segmente le travail en quatre étapes synchronisées :
- onPreExecute (UI Thread) : Préparation de l'interface, notamment l'affichage de la ProgressBar.
- doInBackground (Worker Thread) : Exécution du calcul intensif (boucles mathématiques). C'est la seule étape qui s'exécute en arrière-plan sans bloquer l'affichage.
- onProgressUpdate (UI Thread) : Mise à jour de la ProgressBar en temps réel durant le calcul (progression de 1 à 100).
- onPostExecute (UI Thread) : Finalisation de l'opération, affichage du résultat et masquage des indicateurs de chargement.
L'objectif principal est démontré par le bouton Toast. Même lorsqu'un calcul lourd est en cours dans l'AsyncTask ou qu'un Thread est en attente, l'utilisateur peut cliquer sur "Display Toast". Le message apparaît instantanément, prouvant que le fil principal (Main Thread) n'est jamais saturé.
############################################################################################################################################## Video demo :