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;
}
我正在制作一个 mvp 应用程序,我希望它在事件总线方面具有以下架构(或多或少)@greenrobot:
问题是我正在使用 greenrobot as the event bus 并且我希望有两个事件总线。一根用于数据总线,一根用于 UI 总线。这两辆公共汽车应该不知道对方。所以要创建第一个 eventBus,我执行以下操作:
EventBus myEventBus = EventBus.getDefault();
但我想创建另一个非默认的事件总线,这样我就可以拥有两个。这是怎么做到的。我假设我可以使用 eventBusBuilder 并执行以下操作:
EventBus.builder().build();
这将为我创建另一个不包含默认事件的 eventBus。这个对吗 ?我无法在网上找到任何示例,我想确保我没有遗漏任何配置。我希望它的行为与默认总线相同,但只是它的另一个实例。
为什么不需要单独的 EventBus 对象? 如果你只是 Post 对方不知道的事件,那么他们就不能互相监听。
例如,您使用的自定义 class 名为
ModelToDomainEvent
从模型发送
还有一个名为
的习俗classDomainToViewEvent
从域发送到演示者视图。
您可以将这些事件放在单独的包中以进一步区分它们。
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;
}