Android:启用和服务

20

我正在学习如何在Android上创建和使用服务。我在Android SDK上寻找进一步的帮助,发现了android:enable=[true | false]

SDK中说:

要启用服务,必须将<application><service>属性都设置为“true”(默认情况下都是),如果其中任何一个为“false”,则禁用该服务;它不能被实例化。

所以,我想知道为什么通常会:

  • 将应用程序启用设置为“false”。
  • 将服务启用设置为“false”。

我认为,如果我们将服务启用设置为false,就没有办法调用该服务,那么为什么我们首先要创建该服务呢?

谢谢,对于这样长的消息很抱歉。


@rds 我刚刚提出了一个元问题,关于这个问题和被接受的答案。 - Mark Adamson
2个回答

33
我认为,如果我们将服务的“service enable”设置为false,就没有办法调用该服务,那么我们为什么要首先创建该服务呢?
一般来说,这是正确的。android:enabled实际上是所有组件都继承的,因此它并不是服务特有的。以下是可能使用android:enabled的情况:
- Activity:您希望在启动器中有第二个图标,但仅当用户通过应用内购买购买某些内容(例如升级到“专业”功能)时。 - BroadcastReceiver:您希望在启动时通过ACTION_BOOT_COMPLETED获得控制权,但并非始终如此。 - Service和ContentProvider:您拥有一系列应用程序,只需要(并且希望)保留一个服务/内容提供程序的实现,即使用户安装了您家族的多个应用程序。
在这些情况下,您可能已经在清单中禁用了组件(android:enabled="false"),并使用PackageManagersetComponentEnabledSetting()来在以后有条件地启用它们。

26

新的SAF(存储访问框架)是使用android:enabled属性的良好示例。 http://developer.android.com/guide/topics/providers/document-provider.html

android:enabled属性设置为在资源文件中定义的布尔值。该属性的目的是禁用在运行Android 4.3或更低版本的设备上的提供者。例如,

android:enabled="@bool/atLeastKitKat" 

除了在清单中包含此属性外,您还需要执行以下操作: 在res/values/下的bool.xml资源文件中添加此行:

In addition to adding this attribute in the manifest, you also need to do the following: Add this line in your bool.xml resource file under res/values/.
<bool name="atLeastKitKat">false</bool> 
在位于res/values-v19/目录下的bool.xml资源文件中添加以下代码:
<bool name="atLeastKitKat">true</bool>

好的且有用的例子 - matreshkin
1
另一个问题中,他们也使用这个技巧来在Gradle中具有构建时选项。 - Mark Adamson

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