2017-05-12 35 views
0

为了我的目的,只要应用程序正在运行(前台或后台),我需要监听CONNECTIVITY_CHANGE广播。如果我打算接收广播,即使应用程序在后台,我应该在哪里取消注册BroadcastReceiver?

如果我在onDestroy()方法中取消注册,那么如果我导航回第一个活动,则会丢失接收者,因为第一个活动会置顶。

如果我在onPause()中取消注册,当应用程序在后台运行但未杀死时,我无法侦听更改。

当应用程序被强行杀死时,这会导致接收者泄漏意图。

对我来说,理想的解决方案是什么?

感谢提前:)

+0

https://developer.android.com/topic/performance/background-optimization.html#connectivity-action – ianhanniballake

回答

1

如果应用程序是力停止,它会不管你做什么泄漏。当你被迫停止时,你没有机会注销任何东西。

但是,在您的问题的更大精神 - 如果您需要一个地方注册一个长期的接收器,然后取消注册,答案是在一个服务。

+0

感谢您提供这些信息,当然指出我的方向是正确的。在其他答案中没有找到。 从暂时的解决方法角度来看,“有害”是如何泄漏的意图?有没有什么副作用? –

+0

不是很有害。当发生这些泄漏时,有两种真实场景:您仍然需要接收器并强制关闭。在这种情况下,没有造成伤害。或者你不需要接收器,过去应该注销它。在这种情况下,对您的应用程序没有伤害,但是您的应用程序正在使用它不需要在该接收器上使用处理事件的资源。危害是cpu周期浪费和一些电池电量。那么伤害最小。 –

+0

太好了,解决了我的问题。 将阅读更多的服务和尝试他们为我的用例。 非常感谢! –

相关问题