6

该应用程序有一个 BroadcastReceiver,它侦听启动完成事件并启动后台服务以将一些数据发送到我的 HTTP 服务器。

我的问题是,如果应用程序从未由用户运行(仅安装),BroadcastReceiver 会收到启动事件吗?

4

2 回答 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 链接

查看此博客以获取更多详细信息

于 2013-05-15T05:33:27.947 回答
1

是的,启动接收器已注册为监听启动,因此如果您重新启动设备,无论您是否启动应用程序,它都会触发。同样,如果您将 NFC 侦听器添加到清单中,那么如果有人刷 NFC 卡,应用程序就会做出反应。Android 使用 Manifest 对您在其中指定的任何内容做出反应。这并不取决于应用程序是否正在运行(或曾经运行过)。不过问题很好!:)

根据其他答案和文档进行编辑。这不再是真的了。对困惑感到抱歉。

于 2013-05-15T05:22:52.537 回答