J'essaie de démarrer une Service
de ma Activity
afin de rechercher les modifications sur une page Web, c'est une application privée pour que je ne dérange pas la vie de la batterie ...
Mais j'aimerais passer des données de ma Service
à ma Activity
... Je n'arrive pas à trouver le moyen d'appeler la Activity
depuis ma Service
. Comment puis-je atteindre cet objectif?
Comme Alex l'a indiqué, vous pouvez vous connecter au service et transmettre une sorte d'écouteur ou un rappel au service à utiliser pour les événements.
Ou bien, vous pouvez utiliser une diffusion Intent
, en utilisant peut-être des méthodes telles que setPackage()
sur la Intent
pour limiter la portée de la diffusion.
Vous pouvez également utiliser createPendingResult()
pour créer une PendingIntent
que vous transmettez en tant que Intent
extra au service. Le service peut ensuite utiliser cette PendingIntent
pour déclencher onActivityResult()
dans votre activité.
Ou, vous pouvez utiliser un ResultReceiver
.
Ou, vous pouvez utiliser un Messenger
.
(Certes, je n'ai pas essayé ces deux dernières approches, mais je pense qu'elles vont fonctionner ici)
Une autre alternative: si votre service met à jour le fournisseur de contenu, l'activité peut être notifiée via ContentObserver . Cela serait suffisant si votre service télécharge certaines données du serveur et que vous souhaitez simplement afficher le nouveau contenu de l'activité.
Quelques manières laides:
1.) Si l'activité n'a pas encore commencé, utilisez intent
et startActivity
, mais rappelez-vous intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
2.) Sinon, si l'activité a déjà commencé, vous pouvez écrire votre propre méthode de rappel dans l'activité et enregistrer la méthode dans le service, puis appeler directement la méthode dans le service.
J'espère trouver un moyen intelligent.
Je pense que la diffusion fonctionne aussi bien, vous pouvez écrire une classe interne statique pour recevoir la diffusion et commencer l'activité. Mais c'est aussi moche à mon avis.
Le mécanisme ResultReceiver a été expliqué dans un autre article: - Service API reposant Cependant, il ne fonctionnerait pas dans tous les cas. S'il vous plaît se référer à mon commentaire sur ce post. Le mécanisme de diffusion à portée limitée ou PendingIntent semble plus approprié.