SlideShare une entreprise Scribd logo
LES TÂCHES EN ARRIÈRE PLAN
2017-2018
© Imene Sghaier
ISET Nabeul
SEM3
2
 Objectifs spécifiques
 S’initier à la notion de threads et AsyncTask
 Se familiariser avec la manipulation des Méthodes de
l’AsyncTask
 Eléments de contenu
 La gestion du multitâche par Android
 Les threads dans une application Android
 L’interface Runnable et la classe Thread
 Méthodes d’accès au thread UI depuis d'autres threads
 La classe AsyncTask
 Exemple
 Volume Horaire :
 Cours : 3 heures
OBJECTIFS ET ÉLÉMENTS DE CONTENU
Imene Sghaier-Développement Mobile Avancé
LA GESTION DU MULTITÂCHE PAR ANDROID
 Un programme Android s'exécute dans un processus
 Ce n'est pas le processus principal en lui-même qui va
exécuter le code, mais l'un de ses constituants.
 Les constituants destinés à exécuter le code
s'appellent des threads (« fils d'exécution » en
français).
 Un processus peut avoir un ou plusieurs threads, par
conséquent un processus peut exécuter plusieurs
portions du code en parallèle s'il a plusieurs threads.
 Comme un processus n'a qu'une plage mémoire, alors
tous les threads se partagent les accès à cette plage
mémoire
3
Imene Sghaier-Développement Mobile Avancé
LES THREADS DANS UNE APPLICATION ANDROID
 Quand une activité est lancée, le système crée un thread
principal dans lequel s'exécutera l'application. C'est ce
thread qui est en charge d'écouter les évènements
déclenchés par l'utilisateur quand il interagit avec l'interface
graphique. C'est pourquoi le second nom du thread principal
est thread UI (UI pour User Interface).
 Android utilise un pool de threads (file de threads) pour
gérer le multitâche. Un pool de threads comprend un
nombre n de threads afin d'exécuter un nombre m de tâches
(n et m n'étant pas forcément identiques) qui se trouvent
dans un autre pool en attendant qu'un thread s'occupe
d'elles.
 Les résultats de chaque thread sont aussi placés dans un
pool de manière à pouvoir les récupérer dans un ordre
cohérent. Dès qu'un thread complète sa tâche, il va
demander la prochaine tâche qui se trouve dans le pool
jusqu'à ce qu'il n'y ait plus de tâches. 4
Imene Sghaier-Développement Mobile Avancé
5
 La gestion du multitâche par Android
 Les threads dans une application
Android
 L’interface Runnable et la classe Thread
 Méthodes d’accès au thread UI depuis
d'autres threads
 La classe AsyncTask
 Exemple
PLAN DU CHAPITRE
Imene Sghaier-Développement Mobile Avancé
LES THREADS DANS UNE APPLICATION ANDROID
 Remarques:
 Par défaut, une application n’utilise qu’un thread principal ;
 Seul le thread principal peut modifier les vues de l’interface ;
 Le thread principal gère la queue d’événements.
 Les threads sont créés pour:
 paralléliser des tâches (des calculs par exemple) ;
 attendre la réponse d’un serveur sans bloquer l’application
 Pour ne jamais bloquer le thread principal.
 Enfin, on évite certaines opérations dans le thread UI, en
particulier :
 Accès à un réseau, même s'il s'agit d'une courte opération en théorie.
 Certaines opérations dans la base de données, surtout les sélections
multiples.
 Les accès aux fichiers, qui sont des opérations plutôt lentes.
 Les accès matériels, car certains demandent des temps de chargement
vraiment trop longs (GPS par exemple).
6
Imene Sghaier-Développement Mobile Avancé
EXEMPLE
7
Imene Sghaier-Développement Mobile Avancé
Thread Principal
onClick()
Thread de téléchargement
connexion
Téléchargements
Serveur
Données
Notifier UI
Mise à jour
de l’interface
L’INTERFACE RUNNABLE ET LA CLASSE THREAD
 En java, un thread est une instance de la classe Thread qui
implémente l’interface Runnable
 Cette interface représente les objets qui sont capables de faire
exécuter du code au processeur. Elle ne possède qu'une
méthode, void run(), dans laquelle il faut écrire le code à
exécuter.
8
Imene Sghaier-Développement Mobile Avancé
public interface Runnable {
void run();
}
public class DownloadTask implements Runnable {
public void run() { /* TODO Download */ }
}
9
 La gestion du multitâche par Android
 Les threads dans une application Android
 L’interface Runnable et la classe Thread
 Méthodes d’accès au thread UI depuis
d'autres threads
 La classe AsyncTask
 Exemple
PLAN DU CHAPITRE
Imene Sghaier-Développement Mobile Avancé
L’INTERFACE RUNNABLE ET LA CLASSE THREAD
10
Imene Sghaier-Développement Mobile Avancé
public class ChercherTexte extends Thread {
// La phrase à chercher dans le texte
public String a_chercher = "Être ou ne pas être";
// Le livre
public String livre;
// Le TextView dans lequel mettre le résultat
public TextView display;
public void run() {
int caractere = livre.indexOf(a_chercher);
display.setText("Cette phrase se trouve au " + caractere + " ème
caractère."); }
}
L’INTERFACE RUNNABLE ET LA CLASSE THREAD
11
Imene Sghaier-Développement Mobile Avancé
public class DownloadTask implements Runnable {
private final ImageView im;
public DownloadTask(ImageView im) {
this.im = im;
}
public void run() {
Bitmap bm = loadImage("http://example.com/a.jpg");
/* INTERDIT de faire : imageView.setImageBitmap(bitmap);
Il y a d’autres primitives à utiliser pour faire cette
synchronization*/
}
}
L’INTERFACE RUNNABLE ET LA CLASSE THREAD
 Pour utiliser un threads, on en crée une instance à l'endroit désiré et
on le lance avec la méthode synchronized void start () qui elle-
même appelle void run()
 NB: Une méthode synchronized a un verrou. Dès qu'on lance cette
méthode, alors le verrou s'enclenche et il est impossible pour d'autres
threads de lancer la même méthode.
12
Imene Sghaier-Développement Mobile Avancé
public void onClick(View v) {
Thread t = new Thread();
t.livre = hamlet;
t.display = v;
t.start();
}
L’INTERFACE RUNNABLE ET LA CLASSE THREAD
 La méthode start() n'est pas la méthode à privilégier, car
elle est contraignante à entretenir. À la place, il vaut mieux
de passer une instance anonyme de Runnable dans
un Thread :
 Comme ça l'opération coûteuse (la recherche d'un texte
dans un livre) s'exécute dans un autre thread. C'est une
bonne chose, c'est ce qu'on avait demandé, comme ça la
recherche se fait sans bloquer le thread UI.
13
Imene Sghaier-Développement Mobile Avancé
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
int caractere = hamlet.indexOf("Être ou ne pas être");
v.setText("Cette phrase se trouve au " + caractere + " ème
caractère."); } }).start(); }
14
 La gestion du multitâche par Android
 Les threads dans une application Android
 L’interface Runnable et la classe Thread
 Méthodes d’accès au thread UI depuis
d'autres threads
 La classe AsyncTask
 Exemple
PLAN DU CHAPITRE
Imene Sghaier-Développement Mobile Avancé
MÉTHODES D’ACCÈS AU THREAD UI DEPUIS D'AUTRES
THREADS
 Android offre plusieurs manières d’accéder au thread UI
depuis d'autres threads. Par exemple :
 La méthode d'Activity void runOnUiThread(Runnable a) spécifie
qu'une action doit s'exécuter dans le thread UI. Si le thread actuel
est le thread UI, alors l'action est exécutée immédiatement. Sinon,
l'action est ajoutée à la pile des évènements du thread UI.
 Sur un View, on peut faire boolean post(Runnable a) pour
ajouter le Runnable à la pile des messages du thread UI.
Le boolean retourné vaut true s'il a été correctement placé dans
la pile des messages.
 De manière presque similaire, boolean postDelayed(Runnable
a,long ms) permet d'ajouter un Runnable à la pile des messages,
mais uniquement après qu'une certaine durée ms s'est écoulée.
15
Imene Sghaier-Développement Mobile Avancé
MÉTHODES D’ACCÈS AU THREAD UI DEPUIS D'AUTRES
THREADS
 Exemple
16
Imene Sghaier-Développement Mobile Avancé
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
int car = hamlet.indexOf("Être ou ne pas être");
v.post(new Runnable() {
public void run() {
v.setText("Cette phrase se trouve au " + car
+ " ème caractère.");
}
});
}
}).start(); }
17
 La gestion du multitâche par Android
 Les threads dans une application Android
 L’interface Runnable et la classe Thread
 Méthodes d’accès au thread UI depuis
d'autres threads
 La classe AsyncTask
 Exemple
PLAN DU CHAPITRE
Imene Sghaier-Développement Mobile Avancé
LA CLASSE ASYNCTASK
 Une AsyncTask est ce qu'on appelle un Thread du
processus UI . Cela permet d'effectuer un traitement en
arrière plan sur une application Android sans ralentir la
navigation, et de mettre à jour l'interface de l'application en
fin de traitement.
 Par exemple: on veut afficher dans une activité une liste
de personnes contenue dans une base de données.
L'asyncTask a alors toute son utilité:
 On affiche l’activité
 On lance une AsyncTask qui:
 Récupère les personnes de la base
 Affiche la liste une fois les personnes récupérées
 La classe AsyncTask encapsule la création d'un processus
d'arrière-plan et la synchronisation avec le fil d'exécution
principal. Elle prend également en compte l'état d'avancement
des tâches en cours d'exécution. 18
Imene Sghaier-Développement Mobile Avancé
LA CLASSE ASYNCTASK
 Pour utiliser AsyncTask, on doit créer une classe dérivée.
 Cependant, il ne s'agit pas d'un héritage évident puisqu'il faut préciser
trois paramètres :
 Le paramètre Params permet de définir le typage des objets sur
lesquels on va faire une opération.
 Le deuxième paramètre, Progress, indique le typage des objets
qui indiqueront l'avancement de l'opération.
 Enfin, Result est utilisé pour symboliser le résultat de l'opération
 Pour lancer un objet de type AsyncTask, il suffit d'utiliser dessus la
méthode :
19
Imene Sghaier-Développement Mobile Avancé
public class MaClasse extends AsyncTask<Params, Progress, Result>
final AsyncTask<Params, Progress, Result> execute (Params...
params)
LA CLASSE ASYNCTASK
 Une fois cette méthode exécutée, notre classe va lancer
quatre méthodes de callback, dans cet ordre :
 void onPreExecute() est lancée dès le début de l'exécution,
avant même que le travail commence. On l'utilise donc pour
initialiser les différents éléments qui doivent être initialisés.
 Result doInBackground(Params... params), c'est dans cette
méthode que doit être effectué le travail d'arrière-plan. À la fin,
on renvoie le résultat de l'opération et ce résultat sera transmis à
la méthode suivante — on utilise souvent un boolean pour
signaler la réussite ou l'échec de l'opération. Si on veut publier
une progression pendant l'exécution de cette méthode, on peut
le faire en appelant :
 final void publishProgress(Progress... values) dont la
méthode de callback associée étant void
onProgressUpdate(Progress... values) qui est la méthode
responsable du travail fait en avant plan vu par l’utilisateur.
 void onPostExecute(Result result) permet de conclure
l'utilisation de l'AsyncTask en fonction du résultat result passé en
paramètre. 20
Imene Sghaier-Développement Mobile Avancé
LA CLASSE ASYNCTASK : EXEMPLE
21
Imene Sghaier-Développement Mobile Avancé
Params Progress Result
LA CLASSE ASYNCTASK
 Il est possible d'annuler l'action d'un AsyncTask avec
 où b vaut true si on autorise l'exécution à s'interrompre.
 Par la suite, une méthode de callback est appelée pour
qu’on puisse réagir à cet évènement :
 Un AsyncTask n'est disponible que pour une unique
utilisation, s'il s'arrête ou si l'utilisateur l'annule, alors il faut
en recréer un nouveau.
22
Imene Sghaier-Développement Mobile Avancé
final boolean cancel(boolean b)
void onCancelled().
LA CLASSE ASYNCTASK
 La classe AsyncTask permet de simplifier l’écriture d’un thread et
sa synchronisation avec le thread principal :
23
Imene Sghaier-Développement Mobile Avancé
24
 La gestion du multitâche par Android
 Les threads dans une application Android
 L’interface Runnable et la classe Thread
 Méthodes d’accès au thread UI depuis
d'autres threads
 La classe AsyncTask
 Exemple
PLAN DU CHAPITRE
Imene Sghaier-Développement Mobile Avancé
EXEMPLE – CONNEXION INETRNET EN ARRIÈRE PLAN
POUR TÉLÉCHARGER UNE IMAGE
 Pour cela, nous devons :
 Ajouter une permission à l’application
 Créer un thread
 Ouvrir une connexion
 Lire les données provenant d’un flux
 Injecter les données téléchargées dans l’application
 Ajouter la permission la connexion internet à
l’application
25
Imene Sghaier-Développement Mobile Avancé
<uses-permission android:name="android.permission.INTERNET" />
EXEMPLE – CONNEXION INETRNET EN ARRIÈRE PLAN
POUR TÉLÉCHARGER UNE IMAGE
 Création de la tâche permettant le téléchargement de l’image
26
Imene Sghaier-Développement Mobile Avancé
EXEMPLE – CONNEXION INETRNET EN ARRIÈRE PLAN
POUR TÉLÉCHARGER UNE IMAGE
 L’activité principale
27
Imene Sghaier-Développement Mobile Avancé

Contenu connexe

Similaire à chapitre 2 Android 2.pptx

les Threads
les  Threadsles  Threads
les Threads
Olga Ambani
 
Mécanisme de planification de tâches
Mécanisme de planification de tâchesMécanisme de planification de tâches
Mécanisme de planification de tâchesNovencia Groupe
 
Serveur node red
Serveur node redServeur node red
Serveur node red
FerchichiYassine
 
4 asynch task_services_thread
4 asynch task_services_thread4 asynch task_services_thread
4 asynch task_services_thread
Saber LAJILI
 
Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5
Microsoft
 
Cours java avance avancé thread arraylist
Cours java avance avancé thread arraylistCours java avance avancé thread arraylist
Cours java avance avancé thread arraylist
Houssem Hamrouni
 
Entity_framework_db first
Entity_framework_db firstEntity_framework_db first
Entity_framework_db first
Zineb ELGARRAI
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008Khalil Lechheb
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008Khalil Lechheb
 
Ansible-cours .pdf
Ansible-cours .pdfAnsible-cours .pdf
Ansible-cours .pdf
Jaouad Assabbour
 
Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Les ateliers android_1_vers2015
Les ateliers android_1_vers2015
Saber LAJILI
 
Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Les ateliers android_1_vers2015
Les ateliers android_1_vers2015
Sabeur LAJILI
 
Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Les ateliers android_1_vers2015
Les ateliers android_1_vers2015
Sabeur LAJILI
 
tp-spring.pdf
tp-spring.pdftp-spring.pdf
tp-spring.pdf
badrfathallah2
 
tp-spring.pdf
tp-spring.pdftp-spring.pdf
tp-spring.pdf
seydou4devops
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1
vangogue
 
Android-Tp4: stockage
Android-Tp4: stockageAndroid-Tp4: stockage
Android-Tp4: stockage
Lilia Sfaxi
 
Cocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaHeads France
 
Cours spring
Cours springCours spring
Cours spring
mohamed el haddad
 

Similaire à chapitre 2 Android 2.pptx (20)

les Threads
les  Threadsles  Threads
les Threads
 
Mécanisme de planification de tâches
Mécanisme de planification de tâchesMécanisme de planification de tâches
Mécanisme de planification de tâches
 
Serveur node red
Serveur node redServeur node red
Serveur node red
 
4 asynch task_services_thread
4 asynch task_services_thread4 asynch task_services_thread
4 asynch task_services_thread
 
Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5
 
Cours java avance avancé thread arraylist
Cours java avance avancé thread arraylistCours java avance avancé thread arraylist
Cours java avance avancé thread arraylist
 
Entity_framework_db first
Entity_framework_db firstEntity_framework_db first
Entity_framework_db first
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Ansible-cours .pdf
Ansible-cours .pdfAnsible-cours .pdf
Ansible-cours .pdf
 
Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Les ateliers android_1_vers2015
Les ateliers android_1_vers2015
 
Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Les ateliers android_1_vers2015
Les ateliers android_1_vers2015
 
Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Les ateliers android_1_vers2015
Les ateliers android_1_vers2015
 
tp-spring.pdf
tp-spring.pdftp-spring.pdf
tp-spring.pdf
 
tp-spring.pdf
tp-spring.pdftp-spring.pdf
tp-spring.pdf
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1
 
Android-Tp4: stockage
Android-Tp4: stockageAndroid-Tp4: stockage
Android-Tp4: stockage
 
Springioc
SpringiocSpringioc
Springioc
 
Cocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitaires
 
Cours spring
Cours springCours spring
Cours spring
 

Plus de Institut Supérieur des Etudes Technologiques de Nabeul

Les sockets.pptx
Les sockets.pptxLes sockets.pptx
chapitre 7 Android 2.pptx
chapitre 7 Android 2.pptxchapitre 7 Android 2.pptx
chapitre 6 Android 2.pptx
chapitre 6 Android 2.pptxchapitre 6 Android 2.pptx
chapitre 5 Android 2.pptx
chapitre 5 Android 2.pptxchapitre 5 Android 2.pptx
chapitre 4 Android 2.pptx
chapitre 4 Android 2.pptxchapitre 4 Android 2.pptx
chapitre 3 Android 2.pptx
chapitre 3 Android 2.pptxchapitre 3 Android 2.pptx
chapitre 1 Android 2.pptx
chapitre 1 Android 2.pptxchapitre 1 Android 2.pptx
chap 3 Technologies de communication.pdf
chap 3 Technologies de communication.pdfchap 3 Technologies de communication.pdf
chap 3 Technologies de communication.pdf
Institut Supérieur des Etudes Technologiques de Nabeul
 
Introduction à l'IoT.pdf
Introduction à l'IoT.pdfIntroduction à l'IoT.pdf
chap 7 POO Java Les Exceptions.pptx
chap 7 POO Java Les Exceptions.pptxchap 7 POO Java Les Exceptions.pptx
chap 7 POO Java Les Exceptions.pptx
Institut Supérieur des Etudes Technologiques de Nabeul
 
Chap 6 POO Java.pptx
Chap 6 POO Java.pptxChap 6 POO Java.pptx

Plus de Institut Supérieur des Etudes Technologiques de Nabeul (20)

Les sockets.pptx
Les sockets.pptxLes sockets.pptx
Les sockets.pptx
 
chapitre 8 Android 2.pptx
chapitre 8 Android 2.pptxchapitre 8 Android 2.pptx
chapitre 8 Android 2.pptx
 
chapitre 7 Android 2.pptx
chapitre 7 Android 2.pptxchapitre 7 Android 2.pptx
chapitre 7 Android 2.pptx
 
chapitre 6 Android 2.pptx
chapitre 6 Android 2.pptxchapitre 6 Android 2.pptx
chapitre 6 Android 2.pptx
 
chapitre 5 Android 2.pptx
chapitre 5 Android 2.pptxchapitre 5 Android 2.pptx
chapitre 5 Android 2.pptx
 
chapitre 4 Android 2.pptx
chapitre 4 Android 2.pptxchapitre 4 Android 2.pptx
chapitre 4 Android 2.pptx
 
chapitre 3 Android 2.pptx
chapitre 3 Android 2.pptxchapitre 3 Android 2.pptx
chapitre 3 Android 2.pptx
 
chapitre 1 Android 2.pptx
chapitre 1 Android 2.pptxchapitre 1 Android 2.pptx
chapitre 1 Android 2.pptx
 
Python chapitre 7.pdf
Python chapitre 7.pdfPython chapitre 7.pdf
Python chapitre 7.pdf
 
Python chapitre 6.pdf
Python chapitre 6.pdfPython chapitre 6.pdf
Python chapitre 6.pdf
 
Python chapitre 5.pdf
Python chapitre 5.pdfPython chapitre 5.pdf
Python chapitre 5.pdf
 
Python chapitre 4.pdf
Python chapitre 4.pdfPython chapitre 4.pdf
Python chapitre 4.pdf
 
Python chapitre 3.pdf
Python chapitre 3.pdfPython chapitre 3.pdf
Python chapitre 3.pdf
 
Python chapitre 2.pdf
Python chapitre 2.pdfPython chapitre 2.pdf
Python chapitre 2.pdf
 
Python chapitre 1.pdf
Python chapitre 1.pdfPython chapitre 1.pdf
Python chapitre 1.pdf
 
chap 3 Technologies de communication.pdf
chap 3 Technologies de communication.pdfchap 3 Technologies de communication.pdf
chap 3 Technologies de communication.pdf
 
Chap 2 capteurs et IoT.pdf
Chap 2 capteurs et IoT.pdfChap 2 capteurs et IoT.pdf
Chap 2 capteurs et IoT.pdf
 
Introduction à l'IoT.pdf
Introduction à l'IoT.pdfIntroduction à l'IoT.pdf
Introduction à l'IoT.pdf
 
chap 7 POO Java Les Exceptions.pptx
chap 7 POO Java Les Exceptions.pptxchap 7 POO Java Les Exceptions.pptx
chap 7 POO Java Les Exceptions.pptx
 
Chap 6 POO Java.pptx
Chap 6 POO Java.pptxChap 6 POO Java.pptx
Chap 6 POO Java.pptx
 

Dernier

04_UMT STAR_Étude de nouveaux caractères en lien avec la santé et le bien-êtr...
04_UMT STAR_Étude de nouveaux caractères en lien avec la santé et le bien-êtr...04_UMT STAR_Étude de nouveaux caractères en lien avec la santé et le bien-êtr...
04_UMT STAR_Étude de nouveaux caractères en lien avec la santé et le bien-êtr...
Institut de l'Elevage - Idele
 
Alternative - Complément au Tramway et 3 ème lien de la ville de Quebec (PDF)
Alternative - Complément au Tramway  et 3 ème lien de la ville de Quebec (PDF)Alternative - Complément au Tramway  et 3 ème lien de la ville de Quebec (PDF)
Alternative - Complément au Tramway et 3 ème lien de la ville de Quebec (PDF)
Daniel Bedard
 
03_UMT STAR_compromis entre résistance au parasitisme et efficience alimentai...
03_UMT STAR_compromis entre résistance au parasitisme et efficience alimentai...03_UMT STAR_compromis entre résistance au parasitisme et efficience alimentai...
03_UMT STAR_compromis entre résistance au parasitisme et efficience alimentai...
Institut de l'Elevage - Idele
 
QCM de révision pour la haute qualité.pdf
QCM de révision pour la haute qualité.pdfQCM de révision pour la haute qualité.pdf
QCM de révision pour la haute qualité.pdf
ffffourissou
 
Rénovation des prairies sans labour est-ce possible en bio.pdf
Rénovation des prairies sans labour est-ce possible en bio.pdfRénovation des prairies sans labour est-ce possible en bio.pdf
Rénovation des prairies sans labour est-ce possible en bio.pdf
idelewebmestre
 
Note Agro-climatique et prairies n°4 - Juin 2024
Note Agro-climatique et prairies n°4 - Juin 2024Note Agro-climatique et prairies n°4 - Juin 2024
Note Agro-climatique et prairies n°4 - Juin 2024
idelewebmestre
 
S210-S-27.04-chaudiere-à-vapeur bilan thermique
S210-S-27.04-chaudiere-à-vapeur bilan thermiqueS210-S-27.04-chaudiere-à-vapeur bilan thermique
S210-S-27.04-chaudiere-à-vapeur bilan thermique
ALIIAE
 
SRE - Mythes et Réalités - Voxxed 2024.pdf
SRE - Mythes et Réalités - Voxxed 2024.pdfSRE - Mythes et Réalités - Voxxed 2024.pdf
SRE - Mythes et Réalités - Voxxed 2024.pdf
Henri Gomez
 
05_UMT STAR_Vers une indexation de la longévité fonctionnelle en ovin lait
05_UMT STAR_Vers une indexation de la longévité fonctionnelle en ovin lait05_UMT STAR_Vers une indexation de la longévité fonctionnelle en ovin lait
05_UMT STAR_Vers une indexation de la longévité fonctionnelle en ovin lait
Institut de l'Elevage - Idele
 
01_UMT STAR_étude de la résilience et des compromis entre résilience et effic...
01_UMT STAR_étude de la résilience et des compromis entre résilience et effic...01_UMT STAR_étude de la résilience et des compromis entre résilience et effic...
01_UMT STAR_étude de la résilience et des compromis entre résilience et effic...
Institut de l'Elevage - Idele
 
Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...
Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...
Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...
Daniel Bedard
 
02_UMT STAR_un nouveau biomarqueur de résilience basé sur les métabolites du ...
02_UMT STAR_un nouveau biomarqueur de résilience basé sur les métabolites du ...02_UMT STAR_un nouveau biomarqueur de résilience basé sur les métabolites du ...
02_UMT STAR_un nouveau biomarqueur de résilience basé sur les métabolites du ...
Institut de l'Elevage - Idele
 
PROVINLAIT - Bâtiment et bien-être estival
PROVINLAIT - Bâtiment et bien-être estivalPROVINLAIT - Bâtiment et bien-être estival
PROVINLAIT - Bâtiment et bien-être estival
idelewebmestre
 

Dernier (13)

04_UMT STAR_Étude de nouveaux caractères en lien avec la santé et le bien-êtr...
04_UMT STAR_Étude de nouveaux caractères en lien avec la santé et le bien-êtr...04_UMT STAR_Étude de nouveaux caractères en lien avec la santé et le bien-êtr...
04_UMT STAR_Étude de nouveaux caractères en lien avec la santé et le bien-êtr...
 
Alternative - Complément au Tramway et 3 ème lien de la ville de Quebec (PDF)
Alternative - Complément au Tramway  et 3 ème lien de la ville de Quebec (PDF)Alternative - Complément au Tramway  et 3 ème lien de la ville de Quebec (PDF)
Alternative - Complément au Tramway et 3 ème lien de la ville de Quebec (PDF)
 
03_UMT STAR_compromis entre résistance au parasitisme et efficience alimentai...
03_UMT STAR_compromis entre résistance au parasitisme et efficience alimentai...03_UMT STAR_compromis entre résistance au parasitisme et efficience alimentai...
03_UMT STAR_compromis entre résistance au parasitisme et efficience alimentai...
 
QCM de révision pour la haute qualité.pdf
QCM de révision pour la haute qualité.pdfQCM de révision pour la haute qualité.pdf
QCM de révision pour la haute qualité.pdf
 
Rénovation des prairies sans labour est-ce possible en bio.pdf
Rénovation des prairies sans labour est-ce possible en bio.pdfRénovation des prairies sans labour est-ce possible en bio.pdf
Rénovation des prairies sans labour est-ce possible en bio.pdf
 
Note Agro-climatique et prairies n°4 - Juin 2024
Note Agro-climatique et prairies n°4 - Juin 2024Note Agro-climatique et prairies n°4 - Juin 2024
Note Agro-climatique et prairies n°4 - Juin 2024
 
S210-S-27.04-chaudiere-à-vapeur bilan thermique
S210-S-27.04-chaudiere-à-vapeur bilan thermiqueS210-S-27.04-chaudiere-à-vapeur bilan thermique
S210-S-27.04-chaudiere-à-vapeur bilan thermique
 
SRE - Mythes et Réalités - Voxxed 2024.pdf
SRE - Mythes et Réalités - Voxxed 2024.pdfSRE - Mythes et Réalités - Voxxed 2024.pdf
SRE - Mythes et Réalités - Voxxed 2024.pdf
 
05_UMT STAR_Vers une indexation de la longévité fonctionnelle en ovin lait
05_UMT STAR_Vers une indexation de la longévité fonctionnelle en ovin lait05_UMT STAR_Vers une indexation de la longévité fonctionnelle en ovin lait
05_UMT STAR_Vers une indexation de la longévité fonctionnelle en ovin lait
 
01_UMT STAR_étude de la résilience et des compromis entre résilience et effic...
01_UMT STAR_étude de la résilience et des compromis entre résilience et effic...01_UMT STAR_étude de la résilience et des compromis entre résilience et effic...
01_UMT STAR_étude de la résilience et des compromis entre résilience et effic...
 
Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...
Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...
Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...
 
02_UMT STAR_un nouveau biomarqueur de résilience basé sur les métabolites du ...
02_UMT STAR_un nouveau biomarqueur de résilience basé sur les métabolites du ...02_UMT STAR_un nouveau biomarqueur de résilience basé sur les métabolites du ...
02_UMT STAR_un nouveau biomarqueur de résilience basé sur les métabolites du ...
 
PROVINLAIT - Bâtiment et bien-être estival
PROVINLAIT - Bâtiment et bien-être estivalPROVINLAIT - Bâtiment et bien-être estival
PROVINLAIT - Bâtiment et bien-être estival
 

chapitre 2 Android 2.pptx

  • 1. LES TÂCHES EN ARRIÈRE PLAN 2017-2018 © Imene Sghaier ISET Nabeul SEM3
  • 2. 2  Objectifs spécifiques  S’initier à la notion de threads et AsyncTask  Se familiariser avec la manipulation des Méthodes de l’AsyncTask  Eléments de contenu  La gestion du multitâche par Android  Les threads dans une application Android  L’interface Runnable et la classe Thread  Méthodes d’accès au thread UI depuis d'autres threads  La classe AsyncTask  Exemple  Volume Horaire :  Cours : 3 heures OBJECTIFS ET ÉLÉMENTS DE CONTENU Imene Sghaier-Développement Mobile Avancé
  • 3. LA GESTION DU MULTITÂCHE PAR ANDROID  Un programme Android s'exécute dans un processus  Ce n'est pas le processus principal en lui-même qui va exécuter le code, mais l'un de ses constituants.  Les constituants destinés à exécuter le code s'appellent des threads (« fils d'exécution » en français).  Un processus peut avoir un ou plusieurs threads, par conséquent un processus peut exécuter plusieurs portions du code en parallèle s'il a plusieurs threads.  Comme un processus n'a qu'une plage mémoire, alors tous les threads se partagent les accès à cette plage mémoire 3 Imene Sghaier-Développement Mobile Avancé
  • 4. LES THREADS DANS UNE APPLICATION ANDROID  Quand une activité est lancée, le système crée un thread principal dans lequel s'exécutera l'application. C'est ce thread qui est en charge d'écouter les évènements déclenchés par l'utilisateur quand il interagit avec l'interface graphique. C'est pourquoi le second nom du thread principal est thread UI (UI pour User Interface).  Android utilise un pool de threads (file de threads) pour gérer le multitâche. Un pool de threads comprend un nombre n de threads afin d'exécuter un nombre m de tâches (n et m n'étant pas forcément identiques) qui se trouvent dans un autre pool en attendant qu'un thread s'occupe d'elles.  Les résultats de chaque thread sont aussi placés dans un pool de manière à pouvoir les récupérer dans un ordre cohérent. Dès qu'un thread complète sa tâche, il va demander la prochaine tâche qui se trouve dans le pool jusqu'à ce qu'il n'y ait plus de tâches. 4 Imene Sghaier-Développement Mobile Avancé
  • 5. 5  La gestion du multitâche par Android  Les threads dans une application Android  L’interface Runnable et la classe Thread  Méthodes d’accès au thread UI depuis d'autres threads  La classe AsyncTask  Exemple PLAN DU CHAPITRE Imene Sghaier-Développement Mobile Avancé
  • 6. LES THREADS DANS UNE APPLICATION ANDROID  Remarques:  Par défaut, une application n’utilise qu’un thread principal ;  Seul le thread principal peut modifier les vues de l’interface ;  Le thread principal gère la queue d’événements.  Les threads sont créés pour:  paralléliser des tâches (des calculs par exemple) ;  attendre la réponse d’un serveur sans bloquer l’application  Pour ne jamais bloquer le thread principal.  Enfin, on évite certaines opérations dans le thread UI, en particulier :  Accès à un réseau, même s'il s'agit d'une courte opération en théorie.  Certaines opérations dans la base de données, surtout les sélections multiples.  Les accès aux fichiers, qui sont des opérations plutôt lentes.  Les accès matériels, car certains demandent des temps de chargement vraiment trop longs (GPS par exemple). 6 Imene Sghaier-Développement Mobile Avancé
  • 7. EXEMPLE 7 Imene Sghaier-Développement Mobile Avancé Thread Principal onClick() Thread de téléchargement connexion Téléchargements Serveur Données Notifier UI Mise à jour de l’interface
  • 8. L’INTERFACE RUNNABLE ET LA CLASSE THREAD  En java, un thread est une instance de la classe Thread qui implémente l’interface Runnable  Cette interface représente les objets qui sont capables de faire exécuter du code au processeur. Elle ne possède qu'une méthode, void run(), dans laquelle il faut écrire le code à exécuter. 8 Imene Sghaier-Développement Mobile Avancé public interface Runnable { void run(); } public class DownloadTask implements Runnable { public void run() { /* TODO Download */ } }
  • 9. 9  La gestion du multitâche par Android  Les threads dans une application Android  L’interface Runnable et la classe Thread  Méthodes d’accès au thread UI depuis d'autres threads  La classe AsyncTask  Exemple PLAN DU CHAPITRE Imene Sghaier-Développement Mobile Avancé
  • 10. L’INTERFACE RUNNABLE ET LA CLASSE THREAD 10 Imene Sghaier-Développement Mobile Avancé public class ChercherTexte extends Thread { // La phrase à chercher dans le texte public String a_chercher = "Être ou ne pas être"; // Le livre public String livre; // Le TextView dans lequel mettre le résultat public TextView display; public void run() { int caractere = livre.indexOf(a_chercher); display.setText("Cette phrase se trouve au " + caractere + " ème caractère."); } }
  • 11. L’INTERFACE RUNNABLE ET LA CLASSE THREAD 11 Imene Sghaier-Développement Mobile Avancé public class DownloadTask implements Runnable { private final ImageView im; public DownloadTask(ImageView im) { this.im = im; } public void run() { Bitmap bm = loadImage("http://example.com/a.jpg"); /* INTERDIT de faire : imageView.setImageBitmap(bitmap); Il y a d’autres primitives à utiliser pour faire cette synchronization*/ } }
  • 12. L’INTERFACE RUNNABLE ET LA CLASSE THREAD  Pour utiliser un threads, on en crée une instance à l'endroit désiré et on le lance avec la méthode synchronized void start () qui elle- même appelle void run()  NB: Une méthode synchronized a un verrou. Dès qu'on lance cette méthode, alors le verrou s'enclenche et il est impossible pour d'autres threads de lancer la même méthode. 12 Imene Sghaier-Développement Mobile Avancé public void onClick(View v) { Thread t = new Thread(); t.livre = hamlet; t.display = v; t.start(); }
  • 13. L’INTERFACE RUNNABLE ET LA CLASSE THREAD  La méthode start() n'est pas la méthode à privilégier, car elle est contraignante à entretenir. À la place, il vaut mieux de passer une instance anonyme de Runnable dans un Thread :  Comme ça l'opération coûteuse (la recherche d'un texte dans un livre) s'exécute dans un autre thread. C'est une bonne chose, c'est ce qu'on avait demandé, comme ça la recherche se fait sans bloquer le thread UI. 13 Imene Sghaier-Développement Mobile Avancé public void onClick(View v) { new Thread(new Runnable() { public void run() { int caractere = hamlet.indexOf("Être ou ne pas être"); v.setText("Cette phrase se trouve au " + caractere + " ème caractère."); } }).start(); }
  • 14. 14  La gestion du multitâche par Android  Les threads dans une application Android  L’interface Runnable et la classe Thread  Méthodes d’accès au thread UI depuis d'autres threads  La classe AsyncTask  Exemple PLAN DU CHAPITRE Imene Sghaier-Développement Mobile Avancé
  • 15. MÉTHODES D’ACCÈS AU THREAD UI DEPUIS D'AUTRES THREADS  Android offre plusieurs manières d’accéder au thread UI depuis d'autres threads. Par exemple :  La méthode d'Activity void runOnUiThread(Runnable a) spécifie qu'une action doit s'exécuter dans le thread UI. Si le thread actuel est le thread UI, alors l'action est exécutée immédiatement. Sinon, l'action est ajoutée à la pile des évènements du thread UI.  Sur un View, on peut faire boolean post(Runnable a) pour ajouter le Runnable à la pile des messages du thread UI. Le boolean retourné vaut true s'il a été correctement placé dans la pile des messages.  De manière presque similaire, boolean postDelayed(Runnable a,long ms) permet d'ajouter un Runnable à la pile des messages, mais uniquement après qu'une certaine durée ms s'est écoulée. 15 Imene Sghaier-Développement Mobile Avancé
  • 16. MÉTHODES D’ACCÈS AU THREAD UI DEPUIS D'AUTRES THREADS  Exemple 16 Imene Sghaier-Développement Mobile Avancé public void onClick(View v) { new Thread(new Runnable() { public void run() { int car = hamlet.indexOf("Être ou ne pas être"); v.post(new Runnable() { public void run() { v.setText("Cette phrase se trouve au " + car + " ème caractère."); } }); } }).start(); }
  • 17. 17  La gestion du multitâche par Android  Les threads dans une application Android  L’interface Runnable et la classe Thread  Méthodes d’accès au thread UI depuis d'autres threads  La classe AsyncTask  Exemple PLAN DU CHAPITRE Imene Sghaier-Développement Mobile Avancé
  • 18. LA CLASSE ASYNCTASK  Une AsyncTask est ce qu'on appelle un Thread du processus UI . Cela permet d'effectuer un traitement en arrière plan sur une application Android sans ralentir la navigation, et de mettre à jour l'interface de l'application en fin de traitement.  Par exemple: on veut afficher dans une activité une liste de personnes contenue dans une base de données. L'asyncTask a alors toute son utilité:  On affiche l’activité  On lance une AsyncTask qui:  Récupère les personnes de la base  Affiche la liste une fois les personnes récupérées  La classe AsyncTask encapsule la création d'un processus d'arrière-plan et la synchronisation avec le fil d'exécution principal. Elle prend également en compte l'état d'avancement des tâches en cours d'exécution. 18 Imene Sghaier-Développement Mobile Avancé
  • 19. LA CLASSE ASYNCTASK  Pour utiliser AsyncTask, on doit créer une classe dérivée.  Cependant, il ne s'agit pas d'un héritage évident puisqu'il faut préciser trois paramètres :  Le paramètre Params permet de définir le typage des objets sur lesquels on va faire une opération.  Le deuxième paramètre, Progress, indique le typage des objets qui indiqueront l'avancement de l'opération.  Enfin, Result est utilisé pour symboliser le résultat de l'opération  Pour lancer un objet de type AsyncTask, il suffit d'utiliser dessus la méthode : 19 Imene Sghaier-Développement Mobile Avancé public class MaClasse extends AsyncTask<Params, Progress, Result> final AsyncTask<Params, Progress, Result> execute (Params... params)
  • 20. LA CLASSE ASYNCTASK  Une fois cette méthode exécutée, notre classe va lancer quatre méthodes de callback, dans cet ordre :  void onPreExecute() est lancée dès le début de l'exécution, avant même que le travail commence. On l'utilise donc pour initialiser les différents éléments qui doivent être initialisés.  Result doInBackground(Params... params), c'est dans cette méthode que doit être effectué le travail d'arrière-plan. À la fin, on renvoie le résultat de l'opération et ce résultat sera transmis à la méthode suivante — on utilise souvent un boolean pour signaler la réussite ou l'échec de l'opération. Si on veut publier une progression pendant l'exécution de cette méthode, on peut le faire en appelant :  final void publishProgress(Progress... values) dont la méthode de callback associée étant void onProgressUpdate(Progress... values) qui est la méthode responsable du travail fait en avant plan vu par l’utilisateur.  void onPostExecute(Result result) permet de conclure l'utilisation de l'AsyncTask en fonction du résultat result passé en paramètre. 20 Imene Sghaier-Développement Mobile Avancé
  • 21. LA CLASSE ASYNCTASK : EXEMPLE 21 Imene Sghaier-Développement Mobile Avancé Params Progress Result
  • 22. LA CLASSE ASYNCTASK  Il est possible d'annuler l'action d'un AsyncTask avec  où b vaut true si on autorise l'exécution à s'interrompre.  Par la suite, une méthode de callback est appelée pour qu’on puisse réagir à cet évènement :  Un AsyncTask n'est disponible que pour une unique utilisation, s'il s'arrête ou si l'utilisateur l'annule, alors il faut en recréer un nouveau. 22 Imene Sghaier-Développement Mobile Avancé final boolean cancel(boolean b) void onCancelled().
  • 23. LA CLASSE ASYNCTASK  La classe AsyncTask permet de simplifier l’écriture d’un thread et sa synchronisation avec le thread principal : 23 Imene Sghaier-Développement Mobile Avancé
  • 24. 24  La gestion du multitâche par Android  Les threads dans une application Android  L’interface Runnable et la classe Thread  Méthodes d’accès au thread UI depuis d'autres threads  La classe AsyncTask  Exemple PLAN DU CHAPITRE Imene Sghaier-Développement Mobile Avancé
  • 25. EXEMPLE – CONNEXION INETRNET EN ARRIÈRE PLAN POUR TÉLÉCHARGER UNE IMAGE  Pour cela, nous devons :  Ajouter une permission à l’application  Créer un thread  Ouvrir une connexion  Lire les données provenant d’un flux  Injecter les données téléchargées dans l’application  Ajouter la permission la connexion internet à l’application 25 Imene Sghaier-Développement Mobile Avancé <uses-permission android:name="android.permission.INTERNET" />
  • 26. EXEMPLE – CONNEXION INETRNET EN ARRIÈRE PLAN POUR TÉLÉCHARGER UNE IMAGE  Création de la tâche permettant le téléchargement de l’image 26 Imene Sghaier-Développement Mobile Avancé
  • 27. EXEMPLE – CONNEXION INETRNET EN ARRIÈRE PLAN POUR TÉLÉCHARGER UNE IMAGE  L’activité principale 27 Imene Sghaier-Développement Mobile Avancé