在同一 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));
两个订阅者都被呼叫了,我不明白为什么。我认为这可能与 OtherLoggingEvent
是 LoggingEvent
的子类这一事实有关,但我不确定。那么我的问题就变成了如何与发布者和订阅者保持 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();
我正在使用 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
的子类这一事实有关,但我不确定。那么我的问题就变成了如何与发布者和订阅者保持 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();