- 语法:
<service android:description="string resource" android:directBootAware=["true" | "false"] android:enabled=["true" | "false"] android:exported=["true" | "false"] android:foregroundServiceType=["camera" | "connectedDevice" | "dataSync" | "location" | "mediaPlayback" | "mediaProjection" | "microphone" | "phoneCall"] 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
子类)声明为应用的一个组件。与 Activity 不同,服务缺少可视化界面。服务用于实现长时间运行的后台操作,或可由其他应用调用的富通信 API。必须用清单文件中的
<service>
元素表示所有服务。系统不会识别和运行任何未进行声明的服务。注意:在 Android 8.0(API 级别 26)及更高版本中,系统会限制应用在后台运行时可以执行的操作。如需了解详情,请参阅介绍后台执行限制和对于在后台访问位置信息的限制的指南。
- 属性:
android:description
- 向用户描述服务的字符串。此标签应设置为对字符串资源的引用,以便可以像界面中的其他字符串一样进行本地化。
android:directBootAware
服务是否可感知直接启动 (direct-boot);即,它是否可以在用户解锁设备之前运行。
注意:在直接启动期间,应用中的服务只能访问设备保护存储空间内的数据。
默认值为
"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()
的调用方尚未获得此权限,该方法将不起作用,且系统不会将 Intent 对象传送给服务。stopService()
如果未设置该属性,则对服务应用由
<application>
元素的permission
属性所设置的权限。如果二者均未设置,则服务不受权限保护。 android:process
- 将运行服务的进程的名称。通常,应用的所有组件都会在为应用创建的默认进程中运行。它与应用软件包的名称相同。
<application>
元素的process
属性可以为所有组件设置不同的默认值。不过,组件可以使用其自己的process
属性替换默认属性,从而允许您跨多个进程分布应用。如果为该属性分配的名称以冒号(“:”)开头,则系统会在需要时创建应用专用的新进程,并且服务会在该进程中运行。如果进程名称以小写字符开头,则服务将在采用该名称的全局进程中运行,前提是它具有相应权限。这样,不同应用中的组件就可以共享进程,从而减少资源使用量。
- 另请参阅:
<application>
<activity>
- 引入于:
- API 级别 1
本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2022-09-13。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"没有我需要的信息"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"太复杂/步骤太多"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"内容需要更新"
},{
"type": "thumb-down",
"id": "translationIssue",
"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":"其他"
}]