08 - Chapitre - 5
08 - Chapitre - 5
08 - Chapitre - 5
Programmation mobile
Pr. Yassine SADQI
1. Introduction
2. Processus et Threads
3. AsyncTask
4. Communications réseau basées sur
HTTP
4
Introduction
https://www.clementine.jobs/
Pr. Yassine SADQI 7
Introduction
10
Notions de processus et de thread
14
Main thread
• Pour résoudre ce problème, nous allons appliquer dans notre développement les deux
règles suivantes :
1. Le Thread Principal (UI 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).
2. Nous créons des nouveaux Threads (Backgrounds threads / Worker threads) dès que l'on
veut effectuer des tâches longues, afin de ne jamais bloquer notre interface
graphique.
Main Thread (UI Thread)
Update UI
20
Tâche asynchrone Vs Tâche synchrone
1. OnPreExecute ()
o est appelé sur le thread UI avant que la tâche soit exécutée.
o cette étape est normalement utilisée pour configurer la tâche, par exemple en
affichant une barre de progression dans l'interface utilisateur.
2. doInBackground (Params ...)
o est appelée sur le thread d'arrière-plan immédiatement après la fin de
onPreExecute ().
o cette étape effectue un calcul en arrière-plan, renvoie un résultat et passe le
résultat à onPostExecute ().
o elle peut également appeler publishProgress (Progress ...) pour publier une ou
plusieurs unités de progression.
• Pour utiliser la classe AsyncTask, on doit créer une classe qui hérite de la classe
AsyncTask et qui redéfinit la méthode doInBackground (Params ...), et généralement
aussi la méthode onPostExecute (Result).
• Dans la sous-classe crée de AsyncTask, on doit fournir les types de données pour trois
types de paramètres, ou « void » si le type de paramètre n'est pas utilisé:
AsyncTask <Params, progress, result> {}
o "Params" spécifie le type de paramètres passés à doInBackground ().
o "Progress" spécifie le type de paramètres transmis à publishProgress () sur le thread
d'arrière-plan. Ces paramètres sont ensuite transmis à la méthode onProgressUpdate
() sur le thread principal.
o "Result" spécifie le type de paramètre renvoyé par doInBackground (). Ce paramètre est
automatiquement transmis à onPostExecute () sur le thread principal.
• Dans cette exemple, DownloadFilesTask passe par trois des quatre étapes de
base AsyncTask:
1. doInBackground () télécharge du contenu. Il calcule le pourcentage de
fichiers téléchargés depuis l'index de la boucle for et le transmet à
publishProgress (). La vérification de isCancelled () à l'intérieur de la boucle
for garantit que si la tâche a été annulée, le système n'attend pas la fin de la
boucle.
2. onProgressUpdate () met à jour le pourcentage de progression. Elle est
appelée chaque fois que la méthode publishProgress () est appelée dans
doInBackground (), qui met à jour le pourcentage de progression.
3. doInBackground () calcule le nombre total d'octets téléchargés et le renvoie.
onPostExecute () reçoit le résultat retourné et le transmet à onPostExecute (),
où il est affiché dans une boîte de dialogue.
• Il est possible d’annuler une tâche à tout moment, à partir de n'importe quel thread, en
appelant la méthode cancel () :
public final boolean cancel (boolean mayInterruptIfRunning)
o La méthode cancel () renvoie false si la tâche n'a pas pu être annulée, généralement
parce qu'elle s'est déjà terminée normalement. Sinon, cancel () renvoie true.
o Pour savoir si une tâche a été annulée, vérifiez périodiquement la valeur de retour de
isCancelled () depuis doInBackground (Object []), par exemple depuis l'intérieur d'une
boucle comme indiqué dans l'exemple précédent. La méthode isCancelled () renvoie
true si la tâche a été annulée avant de se terminer normalement.
o Après l'annulation d'une tâche AsyncTask, onPostExecute () ne sera pas appelé après
le retour de doInBackground (). Au lieu de cela, onCancelled (Object) est appelé.
L'implémentation par défaut de onCancelled (Object) appelle onCancelled () et ignore
le résultat.
o Pour permettre à cancel () d'interrompre le thread qui exécute la tâche, transmettez
true pour la valeur de mayInterruptIfRunning.
32
Introduction
• Avant toute chose, il faut dire à Android que notre application va devoir utiliser une connexion
internet lors de son fonctionnement. Cette fonctionnalité nécessite une permission spéciale,
INTERNET.
• Une permission ou bien autorisation se configure via la balise <uses-permission> suivie de la
permission en question, ici INTERNET. Vous pouvez retrouver la liste complète des
permissions sur le site d'Android.
• Dans le fichier AndroidManifest, Ajouter la balise suivante à l'intérieur de la balise <manifest>:
....
</manifest>
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" />
41