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

Android的Greenrobot事件总线-如何创建非默认事件总线,android,greenrobot-eventbus,Android,Greenrobot Eventbus,我正在制作一个mvp应用程序,我希望它在event bus@greenrobot方面具有以下架构(或多或少): 问题是我正在使用,我希望有两个事件总线。一个用于数据总线,一个用于UI总线。这两辆公共汽车不应该互相了解。因此,要创建第一个eventBus,我需要执行以下操作: EventBus myEventBus = EventBus.getDefault(); EventBus.builder().build(); 但是我想创建另一个不是默认的事件总线,这样我就可以有两个。这是怎么做到

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

问题是我正在使用,我希望有两个事件总线。一个用于数据总线,一个用于UI总线。这两辆公共汽车不应该互相了解。因此,要创建第一个eventBus,我需要执行以下操作:

EventBus myEventBus = EventBus.getDefault();
EventBus.builder().build(); 
但是我想创建另一个不是默认的事件总线,这样我就可以有两个。这是怎么做到的。我假设我可以使用并执行以下操作:

EventBus myEventBus = EventBus.getDefault();
EventBus.builder().build(); 

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

为什么不需要单独的EventBus对象? 如果您只是发布另一部分不知道的事件,那么它们就不能从彼此的事件中列出

例如,您使用一个名为

ModelToDomainEvent 
DomainToViewEvent
从模型中发送

和一个名为

ModelToDomainEvent 
DomainToViewEvent
从域发送到演示者视图

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

EventBus本身只组织活动,您有责任发布和收听正确的活动

但如果您确实需要另一个实例,您可以使用以下方法创建一个实例:

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;
}

为什么不需要单独的EventBus对象? 如果您只是发布另一部分不知道的事件,那么它们就不能从彼此的事件中列出

例如,您使用一个名为

ModelToDomainEvent 
DomainToViewEvent
从模型中发送

和一个名为

ModelToDomainEvent 
DomainToViewEvent
从域发送到演示者视图

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

EventBus本身只组织活动,您有责任发布和收听正确的活动

但如果您确实需要另一个实例,您可以使用以下方法创建一个实例:

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;
}

好的,你的分析是正确的,尽管我不需要多个事件总线。好的,你的分析是正确的,尽管我不需要多个事件总线。