我可以在 Activity 通信中使用 EventBus 吗?

Could I use EventBus in Activities communication?

共有三个活动ABC

  1. 在Activity一个onCreate()注册EventBus,在onDestroy()注销一个方法onEvent(TestEvent e);

  2. Activity A 开始 Activity B

  3. Activity B 开始 Activity C

  4. 在ActivityC中:

    EventBus.getDefault().post(new TestEvent("close A"));
    

我就是这样用的EventBus,效果不错。我的代码有什么问题吗?

没关系。 EventBus 是线程安全的,并且有很多方法可以让它更容易使用,比如 onEventMainThread、onEventBackgroundThread、onEventAsync。

您的代码的问题在于:您的 activity 将继续获取事件,即使它在后台也是如此。没关系(在这种特殊情况下)。但是,如果您将来必须实施其他功能,请记住这一点:

  • onCreate 注册 -> onDestroy 取消注册
  • onStart 注册 -> onStop 取消注册
  • onResume 注册 -> onPause 取消注册

还有一点:您必须绝对确保您的 activity 只注册了一次。因为,如果您多次注册,您将收到与注册次数一样多的事件。因此,请像这样修改您的寄存器:

if (!EventBus.getDefault().isRegistered(this)) {
    EventBus.getDefault().register(this);
}

如果您需要更多详细信息,请阅读有关 EventBus 的更多信息here

但是,如果您遵循这些简单的规则,您的 activity 的生命周期。我经常使用它,我没有遇到问题。