J'ai créé un service qui synchronise les données de la bande sur un thread de fond et souhaitez notifier une activité de liste lorsque le service est terminé afin qu'il puisse mettre à jour son curseur? Quelle serait la meilleure façon de faire cela? Je pense à envoyer une émission lorsque le service est terminé mais pas sûr si c'est la meilleure façon de le faire. J'ai besoin de demander le curseur lorsque le service est terminé, je ne suis pas sûr que cela fonctionnera bien avec les récepteurs de diffusion? Je n'ai pas fait beaucoup d'Android dans un certain temps alors merci d'avance. P>
3 Réponses :
Utilisez un gestionnaire code> dans votre service qui enregistre un client lorsque votre En bref, dans votre définir un messager pour répondre aux messages du service comme: p> puis écrivez votre code de connexion de service Comme: p> Notez que le message dans votre et créer votre gestionnaire comme: p> alors, quand vous Voulez-vous envoyer un message à votre la liste de liste code> se connecte au service; C'est-à-dire que dans votre méthode code> oneserviceconnected code> dans votre
listtacivity code>, envoyer un message code> à votre service qui vous permet de garder une trace des clients connectés. Ensuite, vous pouvez simplement faire boucler ces clients dans votre
Service code> et envoyez-leur un message
code> lorsque quelque chose se déroule dans votre code> code> que vous souhaitez notifier votre
Listactivité code> à propos de. Pour plus d'informations, vous pouvez consulter le code dans un projet en cours de mien: mon
Listactivité code>
et mon Service code> Stub .
MainActivity Code>, démarrez et lient à votre service avec : p>
replyto code> est le messager que nous venons de créer. p>
Networkservice code>, gardez une trace des clients connectés avec: p>
MainActivity code>, juste faire quelque chose comme ce qui suit: p>
Cela semble prometteur, toujours un peu confus, mais je pense que cela aura plus de sens lorsque j'essaie de mettre en œuvre. Existe-t-il des limitations en termes de temps d'exécution et de choses comme celle-ci comme avec les récepteurs de diffusion? Je vous ferai savoir ce qui se passe quand je code cela. Merci!
Pas sûr de BroadcastraCeiver Code> S, car cela n'utilise pas celles mais utilise plutôt
Messenger code> s et
gestionnaire code> s interne à l'application. Mais dans mon expérience, je n'ai vu aucun retard avec la mise à jour de mon interface utilisateur basée sur un événement dans mon code> code>. J'espère que cela fonctionne pour toi!
Si vous utilisez déjà la bibliothèque de support, vous pouvez simplement tirer facilement une diffusion à partir du service à l'aide du localBroadcastmanager retour à votre activité qui écouterait l'envoi de la diffusion. p>
Utiliser LocalBroadcastManager garantit uniquement que votre propre application recevrait jamais la diffusion afin de ne pas avoir à vous soucier de fuir les données privées ou de l'ouvrir des trous de sécurité potentiels. P>
Voir aussi: Comment utiliser localBroadcastmanager? P>
EDIT (09/2014): P>
Un meilleur moyen de le faire serait d'utiliser un cadre de bus d'événement comme Otto (mon favori ) ou GreenRobot / EventBus Pour éviter de coupler vos composants trop étroitement. P>
Selon Guide du codeur occupé pour le développement Android avancé strong> P >
un bus d'événement est un excellent moyen pour le service de laisser d'autres pièces
de l'application savait que certains travaux ont été effectués. Il fournit une norme
Channel de communication (ou «bus») que les producteurs et événements événementiels
les consommateurs peuvent accrocher. Les producteurs d'événements ont simplement besoin de remettre l'événement
au bus; Le bus gérera les événements pertinents
consommateurs. Cela réduit le couplage entre les producteurs et
les consommateurs, même réduisant même la quantité de code nécessaire à la source
et évier ces événements. P>
blockQuote>