<service>

语法
<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"(因为它们都默认为 "true")才能启用。如果其中任何一个设置为 "false",则该服务会被停用,无法实例化。

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

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

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

android:foregroundServiceType

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

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

android:icon
表示服务的图标。此属性被设置为对包含图片定义的 drawable 资源的引用。如果未设置此属性,则会使用为整个应用指定的图标。请参阅 <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