<服务>

语法:
<service android:description="string resource"
         android:directBootAware=["true" | "false"]
         android:enabled=["true" | "false"]
         android:exported=["true" | "false"]
         android:foregroundServiceType=["camera" | "connectedDevice" |
                                        "dataSync" | "health" | "location" |
                                        "mediaPlayback" | "mediaProjection" |
                                        "microphone" | "phoneCall" |
                                        "remoteMessaging" | "shortService" |
                                        "specialUse" | "systemExempted"]
         android:icon="drawable resource"
         android:isolatedProcess=["true" | "false"]
         android:label="string resource"
         android:name="string"
         android:permission="string"
         android:process="string"
         android:stopWithTask=["true" | "false"]>
    ...
</service>
包含于:
<application>
可包含:
<intent-filter>
<meta-data>
说明:
将服务(Service 子类)声明为应用的一个组件。与 activity 不同,服务缺少可视化界面。服务用于实现长时间运行的后台操作,或可由其他应用调用的富通信 API。

所有服务必须在清单文件中用 <service> 元素表示。系统不会识别任何未通过上述方式声明的服务,也不会运行这类服务。

注意:在 Android 8.0(API 级别 26)及更高版本中,系统会限制应用在后台运行时可以执行的操作。如需了解详情,请参阅介绍后台执行限制对于在后台访问位置信息的限制的指南。

属性:
android:description
描述服务的用户可读字符串。此说明应设置为对字符串资源的引用,以便可以像界面中的其他字符串一样进行本地化。
android:directBootAware

确定服务是否可感知直接启动,也就是说,它是否可以在用户解锁设备之前运行。

注意:直接启动期间,应用中的服务只能访问在受设备保护的存储空间中存储的数据。

默认值为 "false"

android:enabled
确定系统是否可以实例化服务。如果可以实例化,则设为 "true",否则设为 "false"。默认值为 "true"

<application> 元素具有自己的 enabled 属性,该属性适用于所有应用组件,包括服务。<application><service> 属性必须都设为 "true"(这正是它们两者的默认设置),才会启用服务。如果其中任一属性设为 "false",则表示服务已停用;无法对其进行实例化。

android:exported
确定其他应用的组件是否可以调用服务或与之交互。如果可以,则设为 "true",否则设为 "false"。当该值为 "false" 时,只有同一个应用或具有相同用户 ID 的应用的组件可以启动服务或绑定到服务。

默认值取决于服务是否包含 intent 过滤器。没有任何过滤器意味着该服务只能通过指定其确切的类名称进行调用。这意味着服务仅供应用内部使用,因为其他应用不知道其类名称。因此,在这种情况下,默认值为 "false"。 另一方面,如果存在至少一个过滤器,则意味着该服务会供外部使用,所以默认值为 "true"

此属性并非是唯一限制向其他应用披露服务的方式。您还可以使用权限来限制可以与服务交互的外部实体。请参阅 permission 属性。

android:foregroundServiceType

阐明服务是满足特定用例要求的前台服务。例如,"location" 类型的前台服务表示应用正在获取设备的当前位置,目的通常是继续用户发起的操作,且该操作与设备位置相关。

您可以将多个前台服务类型分配给特定服务。

android:icon
表示服务的图标。此属性应设置为对包含图片定义的可绘制资源的引用。如果未设置此属性,则改用为整个应用指定的图标。请参阅 <application> 元素的 icon 属性。

服务的图标(无论是在此处设置还是由 <application> 元素设置)也是服务的所有 intent 过滤器的默认图标。请参阅 <intent-filter> 元素的 icon 属性。

android:isolatedProcess
如果设置为 "true",则此服务会在与系统其余部分隔离的特殊进程下运行。此服务自身没有权限,唯一与其通信的方式是通过 Service API 进行绑定和启动。
android:label
服务的用户可读名称。如果未设置此属性,则改用整个应用的标签集。请参阅 <application> 元素的 label 属性。

服务的标签(无论是在此处设置还是由 <application> 元素设置)也是服务的所有 intent 过滤器的默认标签。请参阅 <intent-filter> 元素的 label 属性。

此标签应设置为对字符串资源的引用,以便可以像界面中的其他字符串一样进行本地化。不过,为了方便您开发应用,也可以将其设为原始字符串。

android:name
实现服务的 Service 子类的名称。这是一个完全限定的类名称,例如 "com.example.project.RoomService"。不过,作为一种简写形式,如果名称的第一个字符是句点(例如 ".RoomService"),则会将其附加到 <manifest> 元素中指定的软件包名称。

发布应用后,除非您已设置 android:exported="false",否则请勿更改此名称

没有默认值。必须指定此名称。

android:permission
实体启动服务或绑定到服务所需的权限的名称。如果没有向 startService()bindService()stopService() 的调用方授予此权限,该方法将不起作用,且系统不会将 Intent 对象传送给服务。

如果未设置该属性,则对服务应用由 <application> 元素的 permission 属性所设置的权限。如果二者均未设置,则服务不受权限保护。

如需详细了解权限,请参阅应用清单概览中的权限部分以及安全准则

android:process
运行服务的进程的名称。通常,应用的所有组件都会在为应用创建的默认进程中运行。它与应用软件包的名称相同。<application> 元素的 process 属性可以为所有组件设置不同的默认值。不过,组件可以使用自己的 process 属性替换默认属性,从而允许您跨多个进程分布应用。

如果为此属性分配的名称以英文冒号 (:) 开头,则系统会在需要时创建应用专用的新进程,并且服务会在该进程中运行。

如果进程名称以小写字符开头,则服务将在采用该名称的全局进程中运行,前提是它具有相应权限。这样,不同应用中的组件就可以共享进程,从而减少资源使用量。

android:stopWithTask
如果设为 "true",当用户移除根源于应用所拥有的 activity 的任务时,系统会自动停止该服务。默认值为 "false"
另请参阅:
<application>
<activity>
引入于:
API 级别 1