2010-11-28 5 views
4

Je peux trouver plusieurs exemples de création d'un service, mais j'ai du mal à trouver un exemple pratique de la manière d'envoyer des messages entre une activité et un service. De ce que je peux trouver, je pense que mes options sont d'utiliser Intents, AIDL, ou d'utiliser l'objet de service lui-même selon this question.Performances de communication de service à activité Android

Dans mon cas, mon activité est la seule activité qui pourra jamais accéder au service, donc un service local fera l'affaire. Quand l'activité est ouverte, je veux voir quelques messages d'état du service, qui arriveront jusqu'à 20 Hz. Y a-t-il des limitations sur le nombre de messages par seconde que ces méthodes de communication vont supporter? Fondamentalement, quelle méthode va être la meilleure pour ma situation?

Merci.

Répondre

4

Étant donné que Actvity et Service font partie de la même application, il n'est pas nécessaire d'utiliser AIDL. Vous pouvez simplement use your Service as a local one.

+0

L'exemple de service local sur cette page explique parfaitement comment créer un service, mais il ne montre pas comment communiquer entre le service et l'activité. Puis-je utiliser la classe Messenger comme les exemples de service Remote Messenger Service, dans un service local? –

+1

Mise à jour: On dirait que la messagerie fonctionne correctement dans un service local. –

+0

vous n'expliquez pas la communication de service à activité – Atma

1

La limitation est uniquement affectée par les performances de votre périphérique. Il n'y a pas de plafond sur les demandes par seconde. Habituellement, il y a un changement de contexte impliqué, qui utilise beaucoup de CPU (par rapport à d'autres parties de la transmission), mais puisque vous utilisez un service local, vous n'en souffrez pas. En tout cas, 20Hz n'est pas un problème. La meilleure solution pour vous serait d'utiliser AIDL et de configurer un rappel que le service peut appeler pour signaler son état.

Il existe un bon exemple de la façon dont cela est fait dans les APIDemos.