Aller au contenu

service, problème de conception


Lolo le Poulpe

Recommended Posts

bonjour, voilà mon problème, 

je souhaite avoir un service "A" activé à la fois par un BroadcastReceiver, et aussi par des messages venant d'autres applications B et C....

le service A doit donc recevoir des messages (venant du BroadcastReceiver et des autres applis) puis leurs répondre pour les signifier que la tache demandée est finie. 
le service A doit en fonction des messages reçus, effectuer des taches nécessitants des events. 

je schématise (quand une application demande une tache à effectuer):

B -> send to service A -> A exécute une action.onEventend(new ...() {

// action finie, signifie à A que la tache est finie
A.send(fini);
});

A -> reception du message "fini" + divers valeurs de retours -> B.send("fini",blablabla) -> B reçoit le message de fin d’exécution de la tache demandée et les valeurs


voilà l'idée que j'ai en tête.

c'est a peu près pareil quand un BroadcastReceiver déclenche une tache.
le résultat est envoyé à l'application utilisant le service à l'instant T.

pour cela, j'ai pensé à demander un verrouillage du service (par message ) quand une application en a besoin pour éviter qu'une autre appli l'utilise, ce qui rendrait les taches asynchrones et mes "events" ne doivent surtout pas etre asynchones. si le service est libre il envoi un ACCEPTED, et la un dialogue privée se fait entre eux le temps de faire tout ce dont l'application à besoin qui peut durer 10sec comme 20mn...
une fois que l'application à finit, il ferme le service, et celui-ci notifiera toutes les applications (surement par un sendbroadcast je pense) que le service est libre pour laisser la place à un autre.

voilà mon idée...

partant de ça j'ai supposé quelques trucs :
- il faut donc un service (appelé A plus haut) pour effectuer mes taches,
- les applications doivent avoir soit un service eux aussi, soit autres choses du type HandlerThread pour communiquer avec mes applications (qui n'ont pas forcement besoin d'afficher quelque chose de visuel)
- le broadcastreceiver fera un startservice() et les applications feront un bindservice


les hics sont que :

- je ne suis pas expert de android
- je ne sais pas si ma vision est bonne pour réaliser mon besoin
- je ne sais pas comment faire pour garder dans le service "A" le handle ou je ne sais quoi qui me permet de dialoguer avec l'application qui utilise le service au cas ou le service s'arrete.
- comme le service A doit lancer de l'asynchrone (retour par event pour dire au service que la tache est finie), je présume qu'il va s’arrêter si j'ai bien compris avant que la tache asynchrone soit finie, et la je bloque...


merci pour votre aide...

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...