- 语法
<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"
,则此服务将在一个特殊的进程下运行,该进程与系统其余部分隔离,并且没有自己的权限。与它的唯一通信是通过服务 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
本页上的内容和代码示例受 内容许可 中描述的许可证约束。Java 和 OpenJDK 是 Oracle 和/或其关联公司的商标或注册商标。
上次更新时间:2024-01-16 UTC。
[{ "type": "thumb-down", "id": "missingTheInformationINeed", "label":"缺少我需要的信息" },{ "type": "thumb-down", "id": "tooComplicatedTooManySteps", "label":"太复杂/步骤太多" },{ "type": "thumb-down", "id": "outOfDate", "label":"过时" },{ "type": "thumb-down", "id": "samplesCodeIssue", "label":"示例/代码问题" },{ "type": "thumb-down", "id": "otherDown", "label":"其他" }]
[{ "type": "thumb-up", "id": "easyToUnderstand", "label":"易于理解" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"解决了我的问题" },{ "type": "thumb-up", "id": "otherUp", "label":"其他" }]
{ "lastModified": "上次更新时间:2024-01-16 UTC.", "confidential": False }