2014-05-07 6 views
0

Comment puis-je configurer Roboguice d'utiliser la même instance de EventBus lorsqu'il est injecté dans mes activités et récepteurs de diffusion comme ceci:Comment injecter un google guava eventbus en tant que singleton global en utilisant Roboguice dans android?

@Inject EventBus eventBus; 

C'est-à-dire: autant que je comprends, le bus de l'événement doit être un processus global singleton pour que les événements postés dans les récepteurs de diffusion soient souscrits dans mes activités. Actuellement, cependant, il me semble obtenir un bus d'événement distinct pour chaque injection.

Répondre

0
final EventBus bus = new EventBus(); 

dans votre module, et

bind(EventBus.class).toInstance(bus); // or an otherwise exposed singleton 

dans sa méthode configure devrait faire l'affaire.

Pour autant que je comprends, le bus de l'événement doit être un singleton global de processus pour que les événements affichés dans récepteurs de radiodiffusion à souscrire dans mes activités

Pas nécessairement.

Il suffit d'enregistrer l'activité (en tant qu'auditeur) dans le bus d'événements appartenant au récepteur de diffusion.

Il peut y avoir plusieurs instances de bus d'événement, chacune représentant un canal distinct de communication basée sur des événements.

Ou il peut y avoir un bus d'événement pour chaque récepteur de diffusion, et même plusieurs activités souscrites simultanément aux événements qu'il affiche.

En soi, il n'est pas nécessaire d'utiliser un singleton ici, et je serais enclin à parler contre si ce choix de conception n'a pas de bonne justification derrière cela.

+0

Votre réponse a fonctionné pour moi. Je suis curieux, cependant, comment votre suggestion de plusieurs bus d'événements fonctionnerait. Comment une activité s'abonne-t-elle aux événements de plusieurs eventBus? Souhaitez-vous injecter plusieurs événements dans l'activité? Comment un récepteur de diffusion pourrait-il spécifier quel eventBus devait être injecté? – JohnRock

+0

@TheLizardKing oui je vois ce que tu veux dire. Vous devez vous assurer que l'instance 'EventBus' est partagée entre l'écouteur (ou l'abonné) et l'afficheur d'événements (récepteur de diffusion), de sorte que, bien qu'il n'y ait pas de singleton global, vous vous assurez toujours que votre eventBus est partagé par au moins deux objets , sinon il n'y a pas de communication évidemment. Eh bien, vous pouvez utiliser un «fournisseur» pour cela. Il peut être injecté lui-même. Voir cette réponse, par exemple: http://stackoverflow.com/a/18358445/168719 –

Questions connexes