Android 为什么在活动中注册接收者是个坏主意?
在Google的应用内计费普通驱动器示例中,在IabHelper安装成功完成后,注册了一个Android 为什么在活动中注册接收者是个坏主意?,android,Android,在Google的应用内计费普通驱动器示例中,在IabHelper安装成功完成后,注册了一个广播接收器,以侦听更新的购买信息 然而,作者包括以下注释: 注意:在活动中注册此侦听器不是一个好主意,但在此处完成 因为这是一个样本 为什么这对这个听众来说是个坏主意 可以在的onCreate方法中的ONIBSETUPFINISHEDListener定义中找到此注释我猜想广播接收器如果在活动中可能会被破坏BroadcastReceivers通常在清单中声明,并且不是由开发人员手动实例化,而是由操作系统进行实
广播接收器
,以侦听更新的购买信息
然而,作者包括以下注释:
注意:在活动中注册此侦听器不是一个好主意,但在此处完成
因为这是一个样本
为什么这对这个听众来说是个坏主意
可以在
的onCreate
方法中的ONIBSETUPFINISHEDListener
定义中找到此注释我猜想广播接收器
如果在活动中可能会被破坏BroadcastReceiver
s通常在清单中声明,并且不是由开发人员手动实例化,而是由操作系统进行实例化。如果它是在代码中注册的,Android操作系统对BroadcastReceiver
的唯一引用就是与它所包含的活动的生命周期相关的特定实例。如果该活动
为节省内存而死亡/完成/停止,则内部声明的广播接收器
很可能停止接收更新。正如我们所知,广播接收器不应与活动绑定,它应与活动生命周期分离。通常,广播接收器应该在androidmanifest文件中定义。这样做允许活动可以在用户清晰可见时轻松侦听更新,并避免在通过在onStop/onDestroy中取消注册用户不再可见活动时侦听更新
使用Eventbus+广播接收器类实现它的最佳方法。将接收者定义到android清单中。当更新到来时,它将通知接收方类。我们触发事件,该事件将发送到每个注册事件将接收此消息的活动。通过这种方式,在需要更新的应用程序中,您可以轻松订阅和侦听事件。
谢谢,因为如果我们在活动中注册了BroadcastReceiver,那么它的生命周期将绑定到活动的生命周期。因此,当活动被破坏时,接收者将无法工作。因此,在活动未运行时,它无法接收任何Boardcast。
可能是您将丢失用户购买的boardcast。
在这个示例中,我们总是调用mHelper.queryInventoryAsync(mGotInventoryListener)代码>
在活动的OnCreate()函数中。因此,我们不必担心作者在代码中的评论。因为如果活动在收到时当前未处于活动状态,您将无法获得广播。如果它在清单中静态注册,那么即使活动没有运行,接收器也会被广播启动。