<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" >
    ...
</service>
包含在
<application>
可以包含
<intent-filter>
<meta-data>
描述
将服务(Service 子类)声明为应用程序组件之一。与活动不同,服务缺乏可视化用户界面。它们用于实现长时间运行的后台操作或可由其他应用程序调用的丰富的通信 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 的应用程序的组件才能启动服务或绑定到服务。

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

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

android:foregroundServiceType

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

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

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

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

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

服务的标签(无论在此处设置还是由<application>元素设置)也是所有服务意图过滤器的默认标签。请参阅<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属性覆盖默认值,从而允许您将应用程序分布到多个进程中。

如果分配给此属性的名称以冒号开头(:),则在需要时会创建一个属于应用程序的私有新进程,并且服务将在该进程中运行。

如果进程名称以小写字母开头,则服务将在该名称的全局进程中运行,前提是它有权这样做。这允许不同应用程序中的组件共享一个进程,从而减少资源使用。

另请参见
<application>
<activity>
引入于
API 级别 1