1

共有三个活动 A,BC

  1. 在 Activity A 中注册,然后EventBus在 Activity AonCreate()中注销onDestroy(),以及一个方法 onEvent(TestEvent e);

  2. 活动A开始活动B

  3. 活动B开始活动C

  4. 在活动中C

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

我用EventBus这种方式,效果很好。我的代码有什么问题吗?

4

1 回答 1

1

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

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

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

还有其他一些事情:您必须绝对确保您的活动只注册一次。因为,如果您注册不止一次,您将收到与注册数量一样多的事件。因此,请像这样修改您的寄存器:

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

如果您需要更多详细信息,请在此处阅读有关 EventBus的更多信息。

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

于 2015-07-20T09:00:38.340 回答