我可以在活动沟通中使用EventBus吗?

问题描述:

有三个活动ABC我可以在活动沟通中使用EventBus吗?

  1. 注册EventBus在活动A onCreate(),并注销在onDestroy()和方法onEvent(TestEvent e);

  2. 活动A开始活动B

  3. 活动B开始活动C

  4. 在活动C

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

我用EventBus以这种方式,并且它工作得很好。我的代码有什么问题吗?

+0

如果运作良好,问题的目的是什么? – DDsix

+0

我的同事说我不能用这种方式使用EventBus,而且我不确定用这种方式使用EventBus是好的。由于活动生命周期问题,我把注册放在onCreate()并注销onDestroy()。 –

没关系。 EventBus是线程安全的,并且有很多方法使它更容易处理,例如onEventMainThread,onEventBackgroundThread,onEventAsync。

你的代码是这样的:你的活动即使在后台也会继续得到事件。这没关系(在这种特殊情况下)。但是,如果你要实现在未来别的东西,记住这一点:

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

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

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

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

但是,如果您遵循这些简单的规则,您的活动的生命周期。我使用它很多,我不会遇到问题。