3

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

4

1 回答 1

4

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

EventBus BUS = EventBus.builder().eventInheritance(false).installDefaultEventBus();
于 2017-04-07T08:17:50.933 回答