Android 为什么在活动中注册接收者是个坏主意?

Android 为什么在活动中注册接收者是个坏主意?,android,Android,在Google的应用内计费普通驱动器示例中,在IabHelper安装成功完成后,注册了一个广播接收器,以侦听更新的购买信息 然而,作者包括以下注释: 注意:在活动中注册此侦听器不是一个好主意,但在此处完成 因为这是一个样本 为什么这对这个听众来说是个坏主意 可以在的onCreate方法中的ONIBSETUPFINISHEDListener定义中找到此注释我猜想广播接收器如果在活动中可能会被破坏BroadcastReceivers通常在清单中声明,并且不是由开发人员手动实例化,而是由操作系统进行实

在Google的应用内计费普通驱动器示例中,在IabHelper安装成功完成后,注册了一个
广播接收器
,以侦听更新的购买信息

然而,作者包括以下注释:

注意:在活动中注册此侦听器不是一个好主意,但在此处完成 因为这是一个样本

为什么这对这个听众来说是个坏主意


可以在
onCreate
方法中的
ONIBSETUPFINISHEDListener
定义中找到此注释
我猜想
广播接收器
如果在
活动中可能会被破坏
BroadcastReceiver
s通常在清单中声明,并且不是由开发人员手动实例化,而是由操作系统进行实例化。如果它是在代码中注册的,Android操作系统对
BroadcastReceiver
的唯一引用就是与它所包含的
活动的生命周期相关的特定实例。如果该
活动
为节省内存而死亡/完成/停止,则内部声明的
广播接收器
很可能停止接收更新。

正如我们所知,广播接收器不应与活动绑定,它应与活动生命周期分离。通常,广播接收器应该在androidmanifest文件中定义。这样做允许活动可以在用户清晰可见时轻松侦听更新,并避免在通过在onStop/onDestroy中取消注册用户不再可见活动时侦听更新

使用Eventbus+广播接收器类实现它的最佳方法。将接收者定义到android清单中。当更新到来时,它将通知接收方类。我们触发事件,该事件将发送到每个注册事件将接收此消息的活动。通过这种方式,在需要更新的应用程序中,您可以轻松订阅和侦听事件。
谢谢,因为如果我们在活动中注册了BroadcastReceiver,那么它的生命周期将绑定到活动的生命周期。因此,当活动被破坏时,接收者将无法工作。因此,在活动未运行时,它无法接收任何Boardcast。 可能是您将丢失用户购买的boardcast。 在这个示例中,我们总是调用
mHelper.queryInventoryAsync(mGotInventoryListener)

在活动的OnCreate()函数中。因此,我们不必担心作者在代码中的评论。

因为如果活动在收到时当前未处于活动状态,您将无法获得广播。如果它在清单中静态注册,那么即使活动没有运行,接收器也会被广播启动。