Aller au contenu

Créer et interagir avec un service


gmic

Recommended Posts

Bonjour,

j'ai lu pas mal de chose sur comment créer un service, mais je n'arrive pas bien à voir quelle implémentation correspond le mieux à mes besoins.

J'aurais besoin d'un service lancé par une activité, qui à partir d'une heure H va récupérer toutes les minutes des fichiers XML en ligne pour mettre à jour la Bdd. Mais en agissant sur l'UI l'utilisateur peut changer l'heure H (en + ou en -), il faudrait donc qu'on puise interagir entre l'activité et le service.

J'ai vu la doc pour "binder" un service, ça se rapproche le plus de ce dont j'ai besoin, mais apparemment quand on passe par cette fonction le service est actif uniquement quand l'activité est au premier plan, du coup l'intérêt et un peu limité...

Une proposition ou un lien qui pourrait m'aider ?

Merci !

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Oui, tu as 2 possibilités pour utiliser les services : le démarrage ou le binding.

Le démarrage avec startService() est plus simple, mais les seules données que tu peux passer au service sont l'Intent de démarrage; après, plus possible de communiquer et récupérer des résultats.

Le binding ouvre une connexion qui permet d'envoyer et recevoir des commandes.

Si tu veux que le service survive même quand l'utilisateur quitte l'appli, regarde du côté de startForeground() et stopForeground(). Une fois que startForeground est appelé, le service est tranquille. La contrepartie est qu'il est obligatoire de faire apparaître une notification pour que l'utilisateur sache qu'un truc tourne.

En revanche, n'oublie pas... un service qui tourne tire sur la batterie. Pour une tâche qui se déclenche par à-coups dans le temps, tu peux regarder du côté de Alarm.

Lien vers le commentaire
Partager sur d’autres sites

  • 3 weeks later...

Bonjour,

alors j'ai bien avancé là dessus, mais je suis pas encore sûr d'avoir bien intégré l'appel au service.

J'ai fait une première version en utilisant un AlarmManager qui appelle un objet de type BroadcastReceiver au moment voulu, qui à son tour démarre le service. Le service communique avec les activités à mettre à jour via un sendOrderedBroadcast. Ca marche bien, sauf que dans l'activité principale je n'ai pas de lien vers le service, pour savoir notamment s'il est démarré ou pas.

J'ai donc essayé une deuxième solution, j'ai suivi l'exemple de remote service ici : http://developer.android.com/reference/android/app/Service.html. J'ai créé les objets Messenger pour communiquer dans un sens et dans l'autre, et j'ai une fonction doBindService pour binder le service, le problème c'est que je ne sais pas comment l'exécuter avec un alarmManager.

Quelle solution vous parez la plus adaptée ? Et comment la faire fonctionner comme je le souhaite ?

Merci !

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...