在Application类中订阅Eventbus有什么缺点?

时间:2015-08-03 23:40:23

标签: greenrobot-eventbus

我在Android应用程序中使用EventBus。在Eventbus.getDefault().register(this)中进行Application.onCreate()是个好主意吗?我没有任何UI更新。我正在尝试这样做以确保即使应用程序转到后台我也会收到订阅数据。可能还有其他方法可以实现我想要的目标,但我很好奇这种方法是否有任何问题。

我的怀疑是:

  1. 这会导致某种内存泄漏吗? Eventbus引用Application对象,Application对象也依赖于Eventbus。这看似循环。

  2. 何时取消注册?不保证调用Application.onTerminate()。如果#1不是问题,我想忽略Application类中的取消订阅是好的。

2 个答案:

答案 0 :(得分:9)

  

这会导致某种内存泄漏吗? Eventbus引用了   Application对象和Application对象也是依赖的   Eventbus。这看似循环。

直接从Application类订阅事件是完全没问题的。操作系统将清理应用程序,EventBus是其中的一部分。没问题。

  

何时取消注册? Application.onTerminate()不保证是   调用。如果#1不是问题,我想忽略取消订阅是好的   在应用程序类中。

是的,我也会取消订阅终止版,只是为了完整性。但是你在Android设备上是正确的,如果清理了应用程序,那么一切都已经消失,所以不需要“清理”。

答案 1 :(得分:0)

当应用程序物理停止时,您的应用程序类将被终止。

这意味着:

  1. 当操作系统决定实际停止应用程序时(可能需要几天时间)或者有外部干预(即用户停止它或像Clean Master那样的实用程序应用程序),应用程序将完全停止并且破坏。
  2. 任何静态引用也将从内存中删除(即您的EventBus单例)。
  3. 如果您正确注销侦听器,

    (2)将有效 ,即在停止时取消注册活动/片段,或在View.onDetachedFromWindow()等时取消注册视图

    在你的事件回调方法中,你不是试图在一个单独的线程中运行某些东西或者更新一个不存在的activity / view / fragment,你应该没问题。