Articles récents
Android : Gestion des services
Par service, on entend programme qui travaille en tâche de fond. C'est un terme générique car Android propose plusieurs solutions pour créer un service (Thread, Intention, ...).
Une application Android est généralement conçu de deux entités : la vue et le service. En effet, une application qui ne fait rien, ne sert à rien! Or, c'est le service qui réalise le job. Et transmet l'information pour l'affichage ou traitement.
Android permet la création d'un service, on parle d'un service Android, à ne pas confondre avec le service au sens générique. Une application est généralement constitué d'une activité et d'un service. L'activité est utile pour gérer le service et afficher ses résultats. Nous allons donc voir comment coder cela en Java avec le framework Android.
1) Génération d'un service
Le service est totalement distinct de l'activité, nous verrons plus tard comment rattacher l'un et l'autre. Pour créer un service Android, il faut créer un classe et la faire hériter de la classe android.app.Service.Dans la classe du service, il est nécessaire de surcharger les méthodes : onCreate(), onStart(), onDestroy() et onBind(). A noter que OnBind() est chargé de faire lien entre le service et l'activité.
Ce qui donne :
Attention, il ne faut pas oublier de déclarer le service dans le fichier AndroidManifest.xml. La déclaration du service se fait dans la déclaration de l'application tel que:
Ce qui donne :
2) Gestion du service dans l'activité
L'objectif, il ne faut pas l'oublier, est de communiquer entre le service qui travaille en background et une activité qui affichera le résultat du travail réalisé.Pour démarrer un service, il y a la méthode startService, qui reçoit en paramètre une intention par un objet Intent. Pour arrêter, le service on utilisera la méthode stopService().
Nous avons déclaré dans notre service une méthode onBind() qui fait le lien avec l'activité et retourne un objet IBinder. Ensuite, au niveau de l'activité il faut redéfinir la classe ServiceConnection ainsi que ses deux méthodes onServiceConnected() (qui retourne le lien vers le service) et onServiceDisconnected().
Ensuite, il n'y a plus qu'à appeler la méthode bindService() dans la fonction principale de l'activité pour réaliser la jonction entre le service et l'activité. On lui transmet une intention explicite, un lien vers le service et un flag d'option d'association comme BIND_AUTO_CREATE pour créer le lien vers le service tout au long de sa durée de vie.
Voici un exemple d'une activité qui affiche un message en cliquant sur un bouton, le tout fonctionne grâce au service définit ci-dessus:
Avec comme vue:
Et Ă l'affichage vous aurez:
3)Les Threads
Il est également possible de créer un service en utilisant un Thread comme tâche de fond. Pour cela, il suffit simplement d'utiliser la programmation des processus de JAVA classique. Pour plus d'informations sur ce sujet, vous pouvez vous référencer sur l'article situé ici.Comment faire pour implémenter un thread dans une application Android?
Il suffit de créer une classe dédiée à nos thread en utilisant l'interface Runnable. Prenons un exemple simpliste pour bien comprendre l'interaction entre l'activité principal d'Android et le la classe Thread. Prenons l'exemple d'un thread qui incrémente un compteur toute les 10 secondes. L'interface de l'activité principale proposera un bouton pour afficher la valeur du compteur.
La classe Compteur génère le Thread chargé du comptage:
Ensuite, il suffit de l'implémenter dans notre activité:
Ce qui affiche:
Conclusion
Voila, vous savez désormais créer un service! Avec cet exemple, seule l'application accède à son service. Le framework permet d'accéder à des services fournis par d'autres applications. Pour cela, il faudra utiliser le langage AIDL (Android Interface Description Language). Nous n'étudierons pas ce concept qui est assez complexe à appréhender, et il peut courant de proposer des services à d'autres applications, mais sachez que cela existe.
© 2024 www.doritique.fr par Robert DORIGNY
Salut JB, Difficile à dire, il faudrait que tu me donnes ton code afin de réfléchir à ton PB. @+.