40 votes

Comment mettre à jour des informations dans une activité Android à partir d'un service en arrière-plan

Je suis en train de créer une simple application Android qui dispose d'un ActivityList de l'information, lorsque l'application démarre, j'ai l'intention de démarrer un Service qui sera constamment calculer les données (il faudra la changer) et je veux le ActivityList pour être en phase avec les données que le service est le calcul de la durée de vie de l'application.

Comment puis-je configurer mon Activité à être à l'écoute de ce Service? Est-ce la meilleure façon d'aborder ce problème?

Par exemple, si vous imaginez une liste de cours de la bourse - les données sont changées régulièrement et ont besoin d'être en harmonie avec l' (dans mon cas) Service de calcul/récupérer les données en permanence.

Merci d'avance

95voto

CommonsWare Points 402670

Comment puis-je configurer mon Activité d'écoute pour le Service? Est-ce la la meilleure façon d'aborder ce problème?

Vous avez trois options majeures, comme je le vois:

  1. Des bureaux de vote. L' Activity demande périodiquement à l' Service pour les données les plus récentes. À mon humble avis, cette option est nul, mais c'est certainement possible.

  2. Les rappels. Par jax réponse, l' Activity enregistre un objet de rappel ("observateur") avec l' Service. L' Service invoque une méthode sur la fonction de rappel lorsque les modifications de données, qui à son tour met à jour l'INTERFACE utilisateur. Vous pouvez voir un exemple d'utilisation avec un Service ici.

  3. Diffuser Intents. L' Service des émissions d'un Intent par sendBroadcast() sur une modification de données. L' Activity enregistre un BroadcastReceiver l'aide registerReceiver(), et qu' BroadcastReceiver est informé de la réception d'une émission. Cela déclenche l' Activity de charger les données les plus récentes de l' Service, ou peut-être juste pour obtenir les données les plus récentes de figurants dans l'émission Intent. Vous pouvez voir un exemple d'utilisation de cette technique avec un Service ici.

4voto

jax Points 9006

Cela semble être un bon candidat pour le modèle Observer. Fondamentalement, votre activité (The Observer) s’enregistrera avec le service d’arrière-plan (The Observable) et vous pourrez transférer ou extraire des données de votre activité. Dans ce cas, votre observateur sera votre activité et l'observable sera votre service.

Si vous ne connaissez rien aux modèles de conception, achetez "Head First Design Patterns", il est facile à lire et regorge d'informations de qualité.

PS: Je le lis maintenant.

0voto

Janusz Points 52607

Vous aurez un thread d'arrière-plan en cours d'exécution qui calcule les changements dans la liste. Ce fil a désormais besoin d'une possibilité de notifier le GUI que la liste a été mise à jour.

Vous pouvez utiliser une sorte de ArrayAdapter obtenir les données dans la liste. Le ArrayAdapter a une méthode appelée l'adaptateur.notifyDataSetChanged() chaque fois que vous appelez cette méthode, l'adaptateur ne voir que les données ont changé et d'en notifier la liste qu'il doit mettre à jour lors de la prochaine possibilité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X