在同一 class 中订阅不同的事件总线

Subscribe to different event bus in same class

我正在使用 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));

两个订阅者都被呼叫了,我不明白为什么。我认为这可能与 OtherLoggingEventLoggingEvent 的子类这一事实有关,但我不确定。那么我的问题就变成了如何与发布者和订阅者保持 1-1 的关系。我要打电话:

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 对象吗?

两个订阅者都因为事件 class 继承而调用。但是您可以在 EventBus 本身中关闭此 eventInheritance 功能。通过使用此方法:

EventBus BUS = EventBus.builder().eventInheritance(false).installDefaultEventBus();