Android 的 Greenrobot eventBus - 如何创建非默认事件总线

Greenrobot eventBus for Android - how to create a non-default event bus

我正在制作一个 mvp 应用程序,我希望它在事件总线方面具有以下架构(或多或少)@greenrobot:

问题是我正在使用 greenrobot as the event bus 并且我希望有两个事件总线。一根用于数据总线,一根用于 UI 总线。这两辆公共汽车应该不知道对方。所以要创建第一个 eventBus,我执行以下操作:

EventBus myEventBus = EventBus.getDefault();

但我想创建另一个非默认的事件总线,这样我就可以拥有两个。这是怎么做到的。我假设我可以使用 eventBusBuilder 并执行以下操作:

EventBus.builder().build(); 

这将为我创建另一个不包含默认事件的 eventBus。这个对吗 ?我无法在网上找到任何示例,我想确保我没有遗漏任何配置。我希望它的行为与默认总线相同,但只是它的另一个实例。

为什么不需要单独的 EventBus 对象? 如果你只是 Post 对方不知道的事件,那么他们就不能互相监听。

例如,您使用的自定义 class 名为

ModelToDomainEvent 

从模型发送

还有一个名为

的习俗class
DomainToViewEvent

从域发送到演示者视图。

您可以将这些事件放在单独的包中以进一步区分它们。

EventBus 本身仅负责组织事件,您有责任post 并监听正确的事件。

但是如果您真的需要另一个实例,您可以简单地创建一个:

EventBus sepearateInstance = new EventBus();

但是您需要确保在需要时使用相同的实例。所以最好将它存储在一些静态变量中,甚至可以为它编写自己的单例方法:

static volatile EventBus alternativeEventBusInstance;
public static EventBus getAlternativeEventBus() {
    if (alternativeEventBusInstance == null) {
        synchronized (EventBus.class) {
            if (alternativeEventBusInstance == null) {
                alternativeEventBusInstance = new EventBus();
            }
        }
    }
    return alternativeEventBusInstance;
}