• 20 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 12/12/2019

Découvrez les tâches asynchrones

Introduction

Maintenant que vous êtes devenus extrêmement à l'aise pour créer des interfaces utilisateurs sur Android, vous aimeriez passer à l'étape supérieure. Ainsi, nous allons voir dans ce cours comment récupérer et afficher des données distantes, donc des données qui proviennent principalement d'Internet !

Vous avez d'ailleurs certainement déjà l'habitude d'utiliser des applications qui récupèrent leurs données sur Internet, comme Facebook ou encore Gmail. Vous aurez déjà remarqué qu'en fonction de la qualité de votre connexion internet ces données mettent plus ou moins de temps à arriver... Et c'est là que les tâches asynchrones interviennent !

Kesako ? Qu'est ce qu'une tâche asynchrone (et du coup synchrone !) sur Android ?

Pour faire simple :

  • Synchrone : Quand une tâche est exécutée de manière synchrone, vous attendez la fin d’une tâche avant de passer à une autre.

  • Asynchrone : Quand une tâche est exécutée de manière asynchrone, vous pouvez directement passer à une autre tâche avant qu’elle ne soit terminée.

En pratique, vous effectuez pour le moment uniquement des tâches synchrones, et celles-ci s'exécutent les unes à la suite des autres. Dans le cas des tâches asynchrones, celles-ci peuvent s'effectuer en parallèle !

Explications Tâches Asynchrones/Synchrones

Euh... d'accord, mais du coup c'est quoi le souci ?

Eh bien le souci, c'est que si vous effectuez un traitement ou une opération longue dans une tâche synchrone, vous allez faire freezer votre application, et ça je suppose que vous souhaitez l'éviter à vos utilisateurs... :lol:

Comment expliquer ce phénomène ? Avant cela, parlons un peu technique.

Une application Android s'exécute sur un périphérique Android, à l'intérieur d'un processus contenant une plage mémoire qui lui est propre. Un processus exécute des instructions (des morceaux de code) dans un ou plusieurs fils d'exécution, appelé également Thread. Ces instructions seront exécutées les unes après les autres, chacune attendant patiemment son tour.

Processus, Threads & Instructions
Processus, Threads & Instructions

Le fil d'exécution principal sur Android est appelé Main Thread (parfois aussi UI Thread, car essentiellement réservé à l'interface graphique de votre application) et c'est sur ce dernier que toutes vos opérations sont exécutées par défaut, les unes à la suite des autres. Et c'est là que ça se complique... ;)

En effet, lorsqu'un utilisateur appuie sur un bouton, une instruction est envoyée dans ce Main Thread. Jusque là tout va bien. Imaginez maintenant qu'une requête réseau (qui dure plus de 10 secondes) est lancée, donc par défaut dans le MainThread, et qu'avant la fin des 10 secondes, un utilisateur appuie sur un autre bouton. L'instruction correspondante au clic de l'utilisateur devra attendre patiemment que l'instruction chargée de la requête réseau soit terminée... et notre application freeze !

Pour résoudre ce problème,  nous allons appliquer dans notre développement les deux règles suivantes :

  • Le Thread Principal (Main Thread) sera dédié aux opérations extrêmement courtes et dès que nous souhaitons mettre à jour un élément de notre interface graphique (UI)

  • Nous créons des nouveaux Threads (Backgrounds) dès que l'on veut effectuer des tâches longues, afin de ne JAMAIS bloquer notre interface graphique.

Représentation des Threads sur Android
Représentation des Threads sur Android

Eh bien maintenant, on passe à la pratique ! Dans le prochain chapitre, nous allons voir comment les implémenter... :p

Exemple de certificat de réussite
Exemple de certificat de réussite