【问题标题】:Subscribe to different event bus in same class订阅同一类中的不同事件总线
【发布时间】: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));

两个订阅者都被调用了,我不知道为什么。我认为这可能与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 对象吗?

【问题讨论】:

  • 我建议您在发布更新时创建一个新的 EventBus 实例:EventBus.getDefault().post(something_here)

标签: java android greenrobot-eventbus-3.0


【解决方案1】:

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

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

【讨论】:

  • 这太完美了!谢谢!我认为这可能与其中一个订阅类继承自另一个的事实有关。这就像一个魅力,正是我需要的方式。
猜你喜欢
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 2019-03-21
  • 2019-08-05
相关资源
最近更新 更多