应用程序有一个BroadcastReceiver,它侦听引导完成事件,并启动后台服务以向我的HTTP服务器发送一些数据。
我的问题是,如果应用程序从未由用户运行(仅安装),广播接收器是否会收到启动事件?

最佳答案

从android 3.1开始,用户必须启动应用程序一次,才能接收boot_complete广播。
以下来自官方javadoc:
从android 3.1开始,系统的包管理器跟踪
处于停止状态并提供
从后台进程和其他
应用。
注意,应用程序的停止状态与
活动已停止状态。系统管理这两个停止状态
另外。
平台定义了两个新的意图标志,让发送者指定
是否应允许该意图在stopped中激活组件
申请。
标记包含停止包-包含停止的意图筛选器
要解决的潜在目标列表中的应用程序。
flag_exclude_stopped_包-排除stopped的意图筛选器
潜在目标列表中的应用程序。当两者都不是
这些标志中的一个是在意图中定义的,默认行为是
在潜在的列表中包含已停止应用程序的筛选器
目标。
请注意,系统将标志“排除”包添加到所有
广播意图。这样做是为了防止后台广播
无意或不必要地启动组件的服务
停止应用程序。后台服务或应用程序可以
通过添加标志包含停止的包覆盖此行为
应允许激活的广播意图标志已停止
应用。
应用程序在首次安装时处于停止状态,但是
尚未启动,当用户手动停止时
(在管理应用程序中)。
javadoc link
查看this blog了解更多详细信息

07-24 09:49
查看更多