10
votes

Service Android Notifier l'activité Terminé la meilleure façon?

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.


0 commentaires

3 Réponses :


16
votes

Utilisez un gestionnaire dans votre service qui enregistre un client lorsque votre la liste de liste se connecte au service; C'est-à-dire que dans votre méthode oneserviceconnected dans votre listtacivity , envoyer un message à votre service qui vous permet de garder une trace des clients connectés. Ensuite, vous pouvez simplement faire boucler ces clients dans votre Service et envoyez-leur un message lorsque quelque chose se déroule dans votre que vous souhaitez notifier votre Listactivité à propos de. Pour plus d'informations, vous pouvez consulter le code dans un projet en cours de mien: mon Listactivité et mon Service Stub .

En bref, dans votre MainActivity , démarrez et lient à votre service avec : xxx

définir un messager pour répondre aux messages du service comme: xxx

puis écrivez votre code de connexion de service Comme: xxx

Notez que le message replyto est le messager que nous venons de créer.

dans votre Networkservice , gardez une trace des clients connectés avec: xxx

et créer votre gestionnaire comme: xxx

alors, quand vous Voulez-vous envoyer un message à votre MainActivity , juste faire quelque chose comme ce qui suit: xxx


2 commentaires

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 S, car cela n'utilise pas celles mais utilise plutôt Messenger s et gestionnaire 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 . J'espère que cela fonctionne pour toi!



6
votes

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.

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.

Voir aussi: Comment utiliser localBroadcastmanager?

EDIT (09/2014):

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.


0 commentaires

0
votes

Selon Guide du codeur occupé pour le développement Android avancé

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.


0 commentaires