安卓应用程序的服务能在用户启动之前运行吗?

6

该应用有一个广播接收器,监听启动完成事件并启动后台服务向我的HTTP服务器发送一些数据。

我的问题是,如果用户从未运行过该应用(只安装了应用),那么广播接收器是否会接收到启动事件?


1
我认为从ICS或JB(不确定哪个)开始,您必须至少运行一次您的应用程序。 - Hoan Nguyen
2个回答

4

从Android 3.1开始,用户必须至少启动一次应用程序才能接收到boot_complete广播。

以下内容来自官方javadoc:

从Android 3.1开始,系统的包管理器会跟踪处于停止状态的应用程序,并提供一种控制它们从后台进程和其他应用程序启动的方法。
请注意,应用程序的停止状态与Activity的停止状态不同。系统分别管理这两个停止状态。
平台定义了两个新的意图标志,让发送方指定意图是否允许激活停止应用程序中的组件。
FLAG_INCLUDE_STOPPED_PACKAGES - 将已停止应用程序的意图过滤器包含在潜在目标列表中以解析。 FLAG_EXCLUDE_STOPPED_PACKAGES - 从潜在目标列表中排除已停止应用程序的意图过滤器。当意图中未定义这些标志中的任何一个或两个时,默认行为是将已停止应用程序的过滤器包含在潜在目标列表中。
请注意,系统向所有广播意图添加FLAG_EXCLUDE_STOPPED_PACKAGES。这样做是为了防止来自后台服务的广播无意或不必要地启动已停止应用程序的组件。后台服务或应用程序可以通过将FLAG_INCLUDE_STOPPED_PACKAGES标志添加到应该允许激活已停止应用程序的广播意图中来覆盖此行为。
应用程序在首次安装但尚未启动以及由用户手动停止(在“应用程序管理”中)时处于停止状态。

JavaDoc链接

查看这个博客了解更多细节


@Praful Bhatnagar:你能看一下我的问题吗?http://stackoverflow.com/questions/38611793/does-apps-signed-with-system-signature-can-receive-boot-complete-broadcast-befor - Tal Kanel

1
是的,Boot接收器已注册以侦听启动,因此如果您重新启动设备,它将触发,无论您是否启动了应用程序。同样,如果您在清单中添加了NFC侦听器,则如果有人刷卡,应用程序将做出反应。清单由Android用于对您在其中指定的内容做出反应。它不取决于应用程序是否正在运行(或曾经运行过)。 不过,根据其他答案和文档,这已不再正确。抱歉造成困惑。

1
实际上,Android 3.1及以上版本要求用户在应用程序响应任何意图或广播之前至少手动启动一次该应用程序。 - Raghav Sood
有趣。我没有注意到这个变化。好知道! - Yevgeny Simkin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接