【发布时间】:2017-04-07 05:22:58
【问题描述】:
我使用 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 实例:EventBus.getDefault().post(something_here)。
标签: java android greenrobot-eventbus-3.0