我可以在活动沟通中使用EventBus吗?
问题描述:
有三个活动A
,B
和C
我可以在活动沟通中使用EventBus吗?
注册
EventBus
在活动AonCreate()
,并注销在onDestroy()
和方法onEvent(TestEvent e);
活动
A
开始活动B
活动
B
开始活动C
-
在活动
C
:EventBus.getDefault().post(new TestEvent("close A"));
我用EventBus
以这种方式,并且它工作得很好。我的代码有什么问题吗?
答
没关系。 EventBus是线程安全的,并且有很多方法使它更容易处理,例如onEventMainThread,onEventBackgroundThread,onEventAsync。
你的代码是这样的:你的活动即使在后台也会继续得到事件。这没关系(在这种特殊情况下)。但是,如果你要实现在未来别的东西,记住这一点:
- 的onCreate注册 - >的onDestroy注销
- 在onStart注册 - >的onStop注销
- 的onResume注册 - >的onPause取消注册
还有其他的东西:您必须确保您的活动只注册一次。因为,如果您多次注册,您将收到与寄存器数量一样多的事件。因此,请修改寄存器:
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}
如果您需要更多的信息,请阅读更多有关EventBus here。
但是,如果您遵循这些简单的规则,您的活动的生命周期。我使用它很多,我不会遇到问题。
如果运作良好,问题的目的是什么? – DDsix
我的同事说我不能用这种方式使用EventBus,而且我不确定用这种方式使用EventBus是好的。由于活动生命周期问题,我把注册放在onCreate()并注销onDestroy()。 –