【问题标题】:How to inject a google guava eventbus as a global singleton using Roboguice in android?如何在 android 中使用 Roboguice 将 google guava eventbus 作为全局单例注入?
【发布时间】:2014-06-24 13:51:52
【问题描述】:

当像这样注入我的活动和广播接收器时,如何设置 Roboguice 以使用相同的事件总线实例:

@Inject EventBus eventBus;

也就是说: 据我了解,事件总线必须是全局进程单例,以便在我的活动中订阅广播接收器中发布的事件。但是,目前,我似乎为每次注入获得了单独的事件总线。

【问题讨论】:

    标签: android roboguice


    【解决方案1】:
    final EventBus bus = new EventBus();
    

    在您的模块中,并且

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

    在其configure 方法中应该可以解决问题。

    据我了解,事件总线必须是全局进程单例,以便在我的活动中订阅广播接收器中发布的事件

    不一定。

    只需在广播接收器拥有的事件总线中注册活动(作为侦听器)。

    可以有许多事件总线实例,每个实例代表一个单独的基于事件的通信通道。

    或者每个广播接收器可能有一个事件总线,甚至多个活动同时订阅它发布的事件。

    就其本身而言,这里没有要求使用单例,如果该设计选择没有充分的理由,我实际上倾向于反对它。

    【讨论】:

    • 您的回答对我有用。但是,我很好奇您对多个事件总线的建议将如何发挥作用。一个活动如何订阅来自多个事件总线的事件?你会在活动中注入多个事件总线吗?广播接收器如何指定要注入的 eventBus?
    • @TheLizardKing 是的,我明白你的意思。您需要确保EventBus 实例在侦听器(或订阅者)和事件发布者(广播接收者)之间共享,这样虽然没有全局单例,但您仍然确保您的 eventBus 至少由两个对象共享,否则显然没有通信。好吧,您可以为此使用Provider。它可以自己注射。请参阅此答案,例如:stackoverflow.com/a/18358445/168719
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多