在清单中禁用Android服务的目的是什么?

时间:2015-06-12 10:11:32

标签: android service android-manifest

在Android中,可以通过创建Service的子类来创建服务来执行后台任务等。它要使用服务,必须在应用程序的清单中指定:

  

所有服务必须由清单文件中的元素表示。任何未在此处声明的内容都不会被系统看到,也永远不会被运行。

清单中服务的一个参数是'enabled'选项:

  

系统是否可以实例化服务 - 如果可以,则为“true”,否则为“false”。

宣布禁用服务的目的是什么 - 如果我不想要服务,我肯定不会写它/首先将它添加到清单中?

我可以看到在清单中禁用服务的唯一用途,似乎价值有限,如果它是一个仅用于调试的服务,我希望它禁用生产。我错过了什么吗?

2 个答案:

答案 0 :(得分:4)

android:enabled属性设置为资源文件中定义的布尔值。此属性的目的是在运行于不同Android OS版本的设备上启用或禁用该服务。

例如,要在运行Android 4.3或更低版本的设备上禁用该服务,请包括menifest属性android:enabled="@bool/atLeastKitKat"

除了在清单中包含此属性外,您还需要执行以下操作:

bool.xml下的res/values/资源文件中,添加以下行:

<bool name="atLeastKitKat">false</bool>

bool.xml下的res/values-v19/资源文件中,添加以下行:

<bool name="atLeastKitKat">true</bool>

答案 1 :(得分:1)

  

如果我不想要服务,我肯定不会写它/首先将它添加到清单中?

Service的特定情况下,我同意您很少想要禁用它。一种可能性是插入系统的服务(例如,输入法编辑器,可访问性服务),您只想在运行时启用(通过PackageManagersetComponentEnabledSetting()),如果用户进入-app购买解锁功能。我确信还有其他Service场景,尽管在这一天的早些时候没有人想到这一点(哈欠!)。

但是,我怀疑Service“继承了”android:enabled设置,因为它是Android组件类型之一,还有活动,提供程序和接收器。 android:enabled的其他方案在其他组件类型中会更常见。例如,在您知道自己需要BOOT_COMPLETED接收器之前,将其视为一种良好的形式。因此,例如,如果BOOT_COMPLETED接收器仅用于恢复因重新启动而中断的下载,则只需在启用下载时启用接收器即可。在其他任何时候,您也可以将其禁用,这样您就不会在“正常”重启期间浪费用户的时间。