2013-02-04 3 views
2

Quels sont les moyens de communiquer entre une activité et un service sur Android?Communication entre le service et l'activité sur Android

Aujourd'hui, j'ai appris comment communiquer en envoyant un message d'intention et en répondant à l'aide de BroadcastRecevier.

Quelles sont mes autres options? Quelqu'un at-il un tutoriel/référence à ce sujet?

réponse à cette question est:

Il y a plusieurs façons pour une activité de communiquer avec un service et vice versa. Cette section décrit les différentes façons et donne des recommandations à utiliser.

5.1. Liaison d'activité au service local Si le service est démarré dans le même processus que l'activité, l'activité peut se lier directement au service. C'est un moyen de communication relativement simple et efficace.

5.2. Utilisation du récepteur Vous pouvez également utiliser des récepteurs enregistrés dynamiquement pour la communication. Par exemple, votre activité peut enregistrer dynamiquement un récepteur et le service envoie des événements correspondants.

5.3. AIDL pour les services dans un processus différent Pour lier à un service qui s'exécute dans un processus différent, vous devez utiliser l'IPC (Inter Process Communication) car les données doivent être envoyées entre différents processus. Pour cela, vous devez créer un fichier AIDL qui ressemble à une interface Java mais qui se termine par l'extension de fichier .aidl et qui est seulement autorisé à étendre d'autres fichiers AIDL.

Cette approche est requise si votre service doit être fourni à d'autres applications, sinon vous devriez préférer un service local.

5.4. Envoi de données d'intention et regroupement vers les services Le service reçoit des données du composant Android de départ et peut utiliser ces données.

5.5. Gestionnaire et Messenger Si le service doit communiquer de nouveau avec l'activité, il peut recevoir un objet de type Messenger via les données d'intention qu'il reçoit de l'activité. Si le Messenger est lié à un gestionnaire dans l'activité, le service peut envoyer des objets de type Message à l'activité.

Un Messenger est parcelable, ce qui signifie qu'il peut être transmis à un autre processus et que vous pouvez utiliser cet objet pour envoyer des messages au gestionnaire dans l'activité.

Messenger fournit également la méthode getBinder() qui permet de passer un Messenger à l'activité. L'activité peut donc envoyer des messages au service.

Merci à http://www.vogella.com/articles/AndroidServices/article.html

+1

Oui sur google Je vais chercher pour apprendre la technique, sur ce site je cherche un conseil de personnes qualifiées sur le sujet à rechercher! :) –

+0

souhaitez vous avoir le tutoriel le plus simple de deux communication (service <-> activité) dans le code. : D @ user1959567 – gumuruh

Répondre

-2

Les gars ont raison, vous devriez vraiment google pour trouver des réponses!

Cependant, j'ai récemment appris une manière soignée d'envoyer des intentions à un service. Vous pouvez simplement appeler startService(myIntent) pour envoyer une intention à votre service. Si le service n'est pas en cours d'exécution, il sera démarré. Si le service est en cours d'exécution, vous avez la possibilité de réagir aux nouvelles informations.

+1

vous voulez dire si le service est déjà en cours d'exécution, et puis en quelque sorte dans l'activité différente, j'ai publié un nouveau Intent à ce service en utilisant StartService() -> il ne cassera rien? Je pensais que le service est recréé. – gumuruh

4

Comment se connecter au service d'activité:

  1. : Diffusions manière la plus simple, mettre en œuvre un BroadcastReciever dans chacun d'écouter les actions des autres.

  2. messagers: Très bon pour plusieurs types de clients, les deux services et le client ont un Messenger, le service lui fournit Messenger dans onBind(), les clients envoie un message de registre/désinscription avec son propre messager replyTo() du message. Le service enregistre le client messenger. Maintenant, les deux peuvent envoyer/recevoir des messages. IBinder: Si vous avez besoin d'un IPC distant à part entière. Définissez une interface pour le service avec AIDL et passez les implémentations aux clients au onBind().

Android online reference a des explications de chacun.

Questions connexes