Android BroadcastReceiver生命周期:动态注册接收器的文档错误?

时间:2012-05-14 18:11:03

标签: android memory-leaks garbage-collection broadcastreceiver android-manifest

我定义了一个BatteryInfo extends BroadcastReceiver类。我在Activity onCreate()中调用了一次构造函数。我在Activity.registerReceiver的{​​{1}}注册了它。

我试图找出是否需要取消注册它和/或设置其对onCreate()的引用,以便允许我的Activity死亡而不会泄漏内存或堵塞系统中的意图发送者,或者是否系统优雅地自行抛出与此相关的所有内容。为此,我正在思考我读到的BroadcastReceiver Lifecycle

  

BroadcastReceiver对象仅在对onReceive(Context,Intent)的调用期间有效。一旦您的代码从此函数返回,系统会认为该对象已完成且不再有效。“

这是什么意思?显然,我使用null创建并在new BatteryInfo()注册的对象在我的活动持续的整个过程中持续存在。我记录了它的结果,并在整个时间看到它们。显然它在第一次调用registerReceiver()后没有变得无效。

我想知道这部分文档是否只适用于onReceive()中注册的BroadcastReceivers?并且它与动态创建和注册的AndroidManifest完全不正确或无关?

当然,我想知道什么是我的动态接收器的正确清理和引用。

1 个答案:

答案 0 :(得分:1)

代码中BroadcastReceivers所需要做的就是注册并取消注册。该声明是为了通知您,您不能在onReceive之外进行任何工作,例如在另一个线程中,并将值返回BroadcastReceiver。为此,您可以BroadcastReceiver开始Service