Android应用程序的服务可以在用户启动之前运行吗?

时间:2013-05-15 05:20:26

标签: android broadcastreceiver

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

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

2 个答案:

答案 0 :(得分:4)

从android 3.1开始,用户必须启动一次应用程序才能接收boot_complete广播..

以下是来自官方的javadoc:

  

从Android 3.1开始,系统的包管理器会跟踪   处于停止状态的应用程序并提供了一种方法   从后台进程和其他进程控制它们的启动   应用

     

请注意,应用程序的停止状态与a不同   活动停止状态。系统管理这两个停止的状态   分开。

     

平台定义了两个让发件人指定的新意图标志   是否应该允许Intent激活已停止的组件   应用

     

FLAG_INCLUDE_STOPPED_PACKAGES - 包含已停止的意图过滤器   在要解决的潜在目标列表中的应用程序。   FLAG_EXCLUDE_STOPPED_PACKAGES - 排除已停止的意图过滤器   潜在目标清单中的申请。当两者都没有时   这些标志是在intent中定义的,默认行为是   包括潜在列表中已停止应用程序的过滤器   目标

     

请注意,系统会向所有人添加FLAG_EXCLUDE_STOPPED_PACKAGES   广播意图。这样做是为了防止来自后台的广播   来自无意或不必要的组件的服务   停止应用程序。后台服务或应用程序可以   通过添加FLAG_INCLUDE_STOPPED_PACKAGES来覆盖此行为   用于广播应该被允许激活停止的意图的标志   应用

     

应用程序在首次安装时处于停止状态但是   尚未启动以及何时由用户手动停止   (在管理应用程序中)。

javadoc link

查看this blog了解更多详情

答案 1 :(得分:1)

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

根据其他答案和文档,

编辑。这不再适用。对不起,感到困惑。