【问题标题】:Locally managed broadcast receiver leak?本地管理的广播接收器泄漏?
【发布时间】:2013-06-27 17:26:24
【问题描述】:

当应用被系统杀死时,本地(即由 LocalBroadcastManager 管理)BroadcastReceiver 是否有可能泄漏?

我需要它的具体用例是我想在 Activity 的 onCreate/onDestroy 中注册/取消注册 BroadcastReceiver(我需要在 Activity 不可见时激活接收器),但我不会喜欢通过这样做来冒险导致内存泄漏。据我了解,如果系统破坏了单个活动,则 onDestroy 运行并且接收器未注册。如果应用程序被杀死怎么办?接收器是否仍然存在,或者,在本地,它是否与应用程序一起被杀死?

【问题讨论】:

    标签: android memory-leaks broadcastreceiver localbroadcastmanager


    【解决方案1】:

    如果您查看LocalBroadcastManager source code 内部,您会发现它实际上只是一个普通类(如您所说的“本地”),其中Map 将各种BroadcastReceiverIntentFilter 的相应List 连接起来.

    在“系统级别”没有注册任何内容,所以否:如果应用程序被终止,LocalBroadcastManager 类也会随之终止,不会发生泄漏

    【讨论】:

      【解决方案2】:

      您绝对应该在 onDestroy 中取消注册它,因为 onDestroy 并不意味着您的应用程序已完成 - 只是您的 Activity。您应用中的其他 Activity 可能仍在运行,因此接收器会导致泄漏。

      【讨论】:

      • 感谢您的回答。但是,我所说的问题是另一种情况。当系统正在杀死应用程序时,可能不会在 OnDestroy 中取消注册,因为不会调用该方法。在这种情况下接收器是否会“泄漏”?
      猜你喜欢
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多