Je suis en train d'écrire ma première application Android et j'essaie de m'y retrouver dans la communication entre les services et les activités. J'ai un service qui fonctionnera en arrière-plan et fera de l'enregistrement basé sur le temps et le GPS. J'ai une activité qui sera utilisée pour démarrer et arrêter le service.
Tout d'abord, je dois être capable de déterminer si le service est en cours d'exécution lorsque l'activité est lancée. Il y a d'autres questions ici à ce sujet, donc je pense que je peux trouver une solution (mais n'hésitez pas à me donner des conseils).
Mon vrai problème : si l'activité est en cours d'exécution et que le service est lancé, j'ai besoin d'un moyen pour le service d'envoyer des messages à l'activité. De simples chaînes de caractères et des entiers à ce stade - des messages d'état principalement. Les messages ne seront pas envoyés régulièrement, donc je ne pense pas que l'interrogation du service soit une bonne solution s'il existe un autre moyen. Je ne veux cette communication que lorsque l'activité a été lancée par l'utilisateur - je ne veux pas lancer l'activité à partir du service. En d'autres termes, si vous lancez l'activité et que le service est en cours d'exécution, vous verrez des messages d'état dans l'interface utilisateur de l'activité lorsque quelque chose d'intéressant se produit. Si vous ne lancez pas l'activité, vous ne verrez pas ces messages (ils ne sont pas si intéressants).
Il semble que je devrais pouvoir déterminer si le service est en cours d'exécution et, le cas échéant, ajouter l'activité en tant qu'auditeur. Puis supprimer l'activité en tant qu'auditeur lorsque l'activité se met en pause ou s'arrête. Est-ce vraiment possible ? La seule façon que j'ai trouvé pour le faire est de faire en sorte que l'activité implémente Parcelable et construise un fichier AIDL pour pouvoir le passer à travers l'interface distante du service. Cela semble exagéré, et je n'ai aucune idée de la façon dont l'activité devrait implémenter writeToParcel() / readFromParcel().
Existe-t-il une méthode plus simple ou plus efficace ? Merci pour toute aide.
EDIT :
Pour ceux qui s'y intéressent plus tard, il existe un exemple de code de Google pour gérer cela via AIDL dans le répertoire samples : /apis/app/RemoteService.java