【发布时间】:2014-06-24 13:51:52
【问题描述】:
当像这样注入我的活动和广播接收器时,如何设置 Roboguice 以使用相同的事件总线实例:
@Inject EventBus eventBus;
也就是说: 据我了解,事件总线必须是全局进程单例,以便在我的活动中订阅广播接收器中发布的事件。但是,目前,我似乎为每次注入获得了单独的事件总线。
【问题讨论】:
当像这样注入我的活动和广播接收器时,如何设置 Roboguice 以使用相同的事件总线实例:
@Inject EventBus eventBus;
也就是说: 据我了解,事件总线必须是全局进程单例,以便在我的活动中订阅广播接收器中发布的事件。但是,目前,我似乎为每次注入获得了单独的事件总线。
【问题讨论】:
final EventBus bus = new EventBus();
在您的模块中,并且
bind(EventBus.class).toInstance(bus); // or an otherwise exposed singleton
在其configure 方法中应该可以解决问题。
据我了解,事件总线必须是全局进程单例,以便在我的活动中订阅广播接收器中发布的事件
不一定。
只需在广播接收器拥有的事件总线中注册活动(作为侦听器)。
可以有许多事件总线实例,每个实例代表一个单独的基于事件的通信通道。
或者每个广播接收器可能有一个事件总线,甚至多个活动同时订阅它发布的事件。
就其本身而言,这里没有要求使用单例,如果该设计选择没有充分的理由,我实际上倾向于反对它。
【讨论】:
EventBus 实例在侦听器(或订阅者)和事件发布者(广播接收者)之间共享,这样虽然没有全局单例,但您仍然确保您的 eventBus 至少由两个对象共享,否则显然没有通信。好吧,您可以为此使用Provider。它可以自己注射。请参阅此答案,例如:stackoverflow.com/a/18358445/168719