AsynchTask, Service,
Thread
Version Janvier 2014
1Saber LAJILI
problématique
• L’activityManager impose un delai aux UIThread
(5s)
• Les traitements long (io, calcul, connexion ..)
doiv...
Thread
• Thread dit aussi processus léger, fil d’exécution 
Processus lourd
• C’est un fil d’exécution d’une suite d’inst...
Thread
Création de thread
1. Package : java.lang.Object et java.lang.Thread
2. Classe hérite de la classe Thread ou implém...
Exemple
Eemple : 2venement de téléchargement d’une image par
un thread :
construct a new Thread and pass aRunnable to the ...
AsynTask
 AsyncTask?
AsyncTask est une classe abstraite générique
 Nécessaire pour optimiser l’exécution des opérations
...
Solution
 Implémenter ce type de traitement dans un
nouveau thread sans manipuler les thread par :
AsynchTask
 Possibili...
Définition
1. Etendre la classe générique AsynchTask uses 3
types <Params, Progress, Result>
1. Params – the input. what y...
Principe d’exécution
1. Une instance de task créé est exécutée par la méthode
“execute()”
1. “execute()” fait appel à doIn...
Démo
ProgressDialogProgressBar
11Saber LAJILI
Service
 Un service est un composant qui s'exécute en
arrière-plan, sans IHM
 Un service n'a pas de durée définie
 la f...
13Saber LAJILI
Service
cycle de vie
Types de services :
 Started service
 Bounded service
14Saber LAJILI
Service
Création
Démarrage et arrêt d’un service
15Saber LAJILI
Started Service
création et exécution
Démo:
1. Créer une nouvelle classe qui étend la classe «
Service »
2. Redéfinir ses ...
Started Service
Démo
17Saber LAJILI
Bounded Service
 Un bound service (service connecté) est un serveur
dans une interface client-serveur
 Permet aux compos...
Techniques de définition d’interface de
programmation
 Étendre la classe Binder
 Utiliser un Messenger
 Utiliser AIDL (...
Démo
On se propose de réaliser un serveur de
temps. Chaque fois que le client demande
la date et l’heure, le serveur lui r...
Démo
Côté service :
Créer un service dans votre application en héritant
de la classe « Service »
Créer la classe "LocalBin...
Démo
• Côté client « activity » :
• Créer le composant "Client" de type activité et créer
une instance de l’interface "Ser...
Démo
23Saber LAJILI
4 asynch task_services_thread
Prochain SlideShare
Chargement dans…5
×

4 asynch task_services_thread

859 vues

Publié le

Thread, AsynchTask, Android, service

Publié dans : Ingénierie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
859
Sur SlideShare
0
Issues des intégrations
0
Intégrations
36
Actions
Partages
0
Téléchargements
6
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  •  1. onPreExecute() – called on the UI thread before the thread starts running. This method is usually used to setup the task, for example by displaying a progress bar.
       2. doInBackground(Params…) – this is the method that runs on the background thread. In this method you should put all the code you want the application to perform in background. Referring to our Simple RSS Aplication, you would put here the code that downloads the XML feed and does the parsing. The doInBackground() is called immediately after onPreExecute(). When it finishes, it sends the result to the onPostExecute().
       3. onProgressUpdate() - called when you invoke publishProgress() in the doInBackground().
       4. onPostExecute(Result) – called on the UI thread after the background thread finishes. It takes as parameter the result received from doInBackground().
  • Started service : s’exécute dans le processus de l’application
    Bounded service : s’exécute dans des processus indépendants de celui de l’application

  • Started service : s’exécute dans le processus de l’application
    Bounded service : s’exécute dans des processus indépendants de celui de l’application

  • Started service : s’exécute dans le processus de l’application
    Bounded service : s’exécute dans des processus indépendants de celui de l’application

  • Started service : s’exécute dans le processus de l’application
    Bounded service : s’exécute dans des processus indépendants de celui de l’application

  • Les composants peuvent envoyer des requêtes, recevoir des réponses, et même effectuer une communication inter-processus (IPC)
  • 4 asynch task_services_thread

    1. 1. AsynchTask, Service, Thread Version Janvier 2014 1Saber LAJILI
    2. 2. problématique • L’activityManager impose un delai aux UIThread (5s) • Les traitements long (io, calcul, connexion ..) doivent être exécuté dans des threads séparés • Seul le UIThread (MainThread) est capable de mettre à jour l’interface, aucun autre thread n’en a le droit
    3. 3. Thread • Thread dit aussi processus léger, fil d’exécution  Processus lourd • C’est un fil d’exécution d’une suite d’instruction d’un processus lourd. • les threads d'un même processus se partagent sa mémoire virtuelle. Par contre, tous possèdent leur propre pile d’exécution. Avantages: - Rendre l'utilisation d'une application plus fluide, car il n'y a plus de blocage durant les phases de traitements intenses.
    4. 4. Thread Création de thread 1. Package : java.lang.Object et java.lang.Thread 2. Classe hérite de la classe Thread ou implémente l’interface Runnable 3. Définir la méthode run() 4. Appeler la méthode start() depuis l’objet de la classe – commutation de contexte (context switch) entre deux threads est moins coûteuse que la commutation de contexte entre deux processus. –Conseiilé à l’utiliser pour la gestion de l’interface exp: traitement de texte, …
    5. 5. Exemple Eemple : 2venement de téléchargement d’une image par un thread : construct a new Thread and pass aRunnable to the constructor public void onClick(View v) { new Thread(new Runnable() { public void run() { Bitmap b = loadImageFromNetwork("http://example.com/image.png") ; mImageView.setImageBitmap(b); } }).start(); }
    6. 6. AsynTask  AsyncTask? AsyncTask est une classe abstraite générique  Nécessaire pour optimiser l’exécution des opérations longues en background  Retourne son résultat dans UI thread (actvité courante) sans être obligé de manipuler les threads  L’application principale se lance dans un seul thread  En cas d’accès à un serveur en réseau (Exp: authentification) , l’interface user reste en attente sans réponse !!! En cas de crash l’application en entier se crash!!! 6Saber LAJILI
    7. 7. Solution  Implémenter ce type de traitement dans un nouveau thread sans manipuler les thread par : AsynchTask  Possibilité d’annuler la tâche (Task) sans perturber le UI principale 7Saber LAJILI
    8. 8. Définition 1. Etendre la classe générique AsynchTask uses 3 types <Params, Progress, Result> 1. Params – the input. what you pass to the AsyncTask 2. Progress – if you have any updates, passed to onProgressUpdate() 3. Result – the output. what returns doInBackground() 2. Surcharger les méthodes : 1. onPreExecute() 2. doInBackground(Params…) 3. onProgressUpdate() 4. onPostExecute(Result) 8Saber LAJILI
    9. 9. Principe d’exécution 1. Une instance de task créé est exécutée par la méthode “execute()” 1. “execute()” fait appel à doInBackground (Params) et onPostExecute(Result) 2. Le paramètre input params est passé à doInBackground (Params…) et à onPostExecute (Result) 3. doInBackground(Params…) contient le code à exécuter dans le nouveau thread 4. onPostExecute(Result) se synchronise avec l’activité principale et le permet de se modifier 10Saber LAJILI
    10. 10. Démo ProgressDialogProgressBar 11Saber LAJILI
    11. 11. Service  Un service est un composant qui s'exécute en arrière-plan, sans IHM  Un service n'a pas de durée définie  la fin d’une activité n’entraine pas sa terminaison  Nécessaire pour les opérations longues et répétitives (Exp: les téléchargements sur Internet)  Un service s'exécute par défaut dans le processus principal de l'application.  Possible de l’exécuter dans un nouveau thread 12Saber LAJILI
    12. 12. 13Saber LAJILI
    13. 13. Service cycle de vie Types de services :  Started service  Bounded service 14Saber LAJILI
    14. 14. Service Création Démarrage et arrêt d’un service 15Saber LAJILI
    15. 15. Started Service création et exécution Démo: 1. Créer une nouvelle classe qui étend la classe « Service » 2. Redéfinir ses méthodes 3. Déclarer ce service comme composant dans le fichier manifest.xml 4. Appeler/arrêter ce service par startService() et stopService(). 16Saber LAJILI
    16. 16. Started Service Démo 17Saber LAJILI
    17. 17. Bounded Service  Un bound service (service connecté) est un serveur dans une interface client-serveur  Permet aux composants (tels que les activités, content Provider et service) de se lier au service,  la liaison à un service, par la méthode onBind ()  Plusieurs clients peuvent se connecter au service à la fois  ne s'exécute pas dans le fond indéfiniment  Lorsque le dernier client se déconnecte du service, le système détruit le service 18Saber LAJILI
    18. 18. Techniques de définition d’interface de programmation  Étendre la classe Binder  Utiliser un Messenger  Utiliser AIDL (Android Interface Definition Language) 19Saber LAJILI
    19. 19. Démo On se propose de réaliser un serveur de temps. Chaque fois que le client demande la date et l’heure, le serveur lui répond Démarche: Réaliser une activité qui demande le temps au près de serveur Interface de programmation: Binder 20Saber LAJILI
    20. 20. Démo Côté service : Créer un service dans votre application en héritant de la classe « Service » Créer la classe "LocalBinder" dans votre service et étendre la classe "Binder". Dans cette classe implémenter la méthode « onBind() » du service ensuite retouner l’instance de la classe "LocalBinder" 21Saber LAJILI
    21. 21. Démo • Côté client « activity » : • Créer le composant "Client" de type activité et créer une instance de l’interface "ServiceConnection". • Implémenter les deux méthodes de cette interface onServiceConnected() et onServiceDisconnected(). • Dans la méthode onServiceConnected, vous allez avoir une instance de IBinder, ainsi forcez le comme type (cast it) classe LocalBinder déjà créé dans le service. • Implémenter la méthode onStart() et connecter au service en utilisant la méthode bindService() • Implémenter la méthode onStop() et déconnecter de service en utilisant la méthode unbindService() 22Saber LAJILI
    22. 22. Démo 23Saber LAJILI

    ×