订阅不同的事件总线在同一类
问题描述:
我用GreenRobot Event Bus 3.0
作为事件总线和我有2个出版商:订阅不同的事件总线在同一类
private static final EventBus EVENT_BUS = new EventBus();
//Publish event to the event bus
public static void sendEvent(LoggingEvent event){
LogPublisher.EVENT_BUS.post(event);
}
//Publish event to the event bus
public static void sendEvent(OtherLoggingEvent event){
LogPublisher.EVENT_BUS.post(event);
}
我有2个用户:
@Subscribe(threadMode = ThreadMode.ASYNC)
public void onEvent(LoggingEvent event){
logEvent(event);
}
@Subscribe(threadMode = ThreadMode.ASYNC)
public void onEvent(OtherLoggingEvent event){
logEvent(event);
}
的问题是化妆的时候一个电话,如:
MyPublisher.sendEvent(new OtherLoggingEvent(varA, varB, varC));
两个用户被叫,我不明白为什么。我认为这可能与OtherLoggingEvent
是LoggingEvent
的子类有关,但我不确定。我的问题就是如何保持与发布者和订阅者的关系。我想打电话:
MyPublisher.sendEvent(new OtherLoggingEvent(varA, varB, varC));
,并有用户public void onEvent(OtherLoggingEvent event)
打来电话,当我打电话:
MyPublisher.sendEvent(new LoggingEvent(varD, varE, varF));
用户:
public void onEvent(LoggingEvent event)
会叫什么名字?这是否会按原样工作,但必须确保这些类是唯一的,而不是彼此的子类?我是否必须创建一个新的EventBus
对象?
答
这两个订户都因为事件类继承而调用。但是你可以在EventBus本身中关闭这个eventInheritance
功能。通过使用这种方法:
EventBus BUS = EventBus.builder().eventInheritance(false).installDefaultEventBus();
+0
这是完美的!谢谢!我认为这可能与一个订阅类从另一个继承的事实有关。这就像一个魅力,只是我需要的方式。 – BlackHatSamurai
我建议你同时发布的更新,创建EventBus的新实例:** EventBus.getDefault()后(something_here)**。 –