2017-04-07 68 views
2

我用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的子类有关,但我不确定。我的问题就是如何保持与发布者和订阅者的关系。我想打电话:

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

+0

我建议你同时发布的更新,创建EventBus的新实例:** EventBus.getDefault()后(something_here)**。 –

回答

3

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

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

这是完美的!谢谢!我认为这可能与一个订阅类从另一个继承的事实有关。这就像一个魅力,只是我需要的方式。 – BlackHatSamurai