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