<service>

语法

包含于

<application>

可包含

<intent-filter>

<meta-data>

描述

将一个服务(Service 的子类)声明为某个应用程序的组件。与活动不同,服务没有用户界面。它用于处理长时间的后台操作,或实现可被其他应用程序调用的富交互 API。

属性

android:enabled

该服务是否能被系统实例化。“true”表示可以,“false”表示不可。默认值为“true”。

<application> 元素也具有 enabled 属性。这一属性作用于包括服务在内的该应用程序所包含的所有组件。如果要使用某个服务,<application> 与 <service> 的 enabled 属性必须同时为“true”。如果其中有一方为“false”,该服务就将被禁用,无法被系统实例化。

android:exported

该服务能否被其他应用程序的组件调用或与之交互。“true”表示可以,“false”表示不可。如果为“false”,只有同一应用程序,或具有相同用户 ID 的应用程序的组件才能启动或绑定该服务。

该属性的默认值由服务是否包含意图过滤器决定。如果该服务不含任何意图过滤器,则表示要调用它必须明确指定其类名。这意味着该服务被设计为仅供应用程序内部使用(因为其他应用程序无法知晓服务的类名)。此时,exported 属性的默认值为“false”。另一方面,如果存在一个或更多的意图过滤器,则表示该服务可被外部程序调用,于是默认值为“true”。

要限制一个服务被其他应用程序调用,这只是方法之一。我们也可以利用 permission 来限制外部实体与服务发生交互(参见 permission 属性)。

android:icon

代表该服务的图标。该属性必须是某一drawable资源(包含了图像的定义)的引用。如果不为该属性赋值,该服务将默认使用应用程序的图标(参见 <application> 元素的 icon 属性)。

无论通过该属性设置,还是直接沿用 <application> 元素的图标,服务的图标也是该服务所有意图过滤器的默认图标(参见 <intent-filter> 元素的 icon 属性)。

android:isolatedProcess

如果为“true”,该服务将运行于某个特殊进程,与系统其他进程分隔,且不提供任何访问权限。此时,我们只能通过 Service API 与之通信(绑定与启动)。

android:label

用于向用户显示的服务名称。如果不为该属性赋值,该服务将默认使用应用程序的名称(参见 <application> 元素的 label 属性)。

无论通过该属性设置,还是直接沿用 <application> 元素的名称,服务的名称也是该服务所有意图过滤器的默认名称(参见 <intent-filter> 元素的 label 属性)。

该标签应该是某一 string 资源的引用,以便与其他在用户界面中显示的字符串一样进行本地化。不过,在开发过程中,为了方便,该属性也支持直接使用字符串字面量。

android:name

实现了该服务的 Service 子类的名称。它应当为完整的类名(如”com.example.project.RoomService”)。不过,为便于使用,我们可以仅使用包名之后的部分(如”.RoomService”),<manifest> 元素中指定的包名将被自动补全。

一旦我们发布了应用程序,就不该再去修改它的名称(除非 android:exported 被设为“false”)。

该属性没有默认值,但必须被赋值。

android:permission

未启动或绑定该程序所必需的权限名称。如果 startService()、bindService() 或 stopService() 的调用方不具有该权限,就无法访问该服务,Intent 对象也不会被传送。

如果该属性未赋值,<application> 元素的 permission 属性将作为其默认值。如果 <application> 元素同样为对 permission 属性赋值,该服务将不受权限保护。

如需获得更多信息,参见简介中的权限一节,或参见文档《安全与权限》。

android:process

运行该服务的进程名称。通常,一个应用程序的所有组件都运行于为其创建的默认进程。该进程与应用程序的包名同名。我们可以通过 <application> 元素的 process 属性为所有组件设置一个不同的默认进程名称。同时,组件也可以通过改写其 process 属性的值,使应用以多线程的方式运行。

如果该属性的值以冒号(”:”)起始,则会在必要时创建一个应用程序私有的新进程来运行该服务。如果进程名称以小写字母起始,该服务将运行于一个同名的全局进程。此时,该属性表示服务有权限使用该进程。于是,不同应用程序中的组件可以共享一个进程,节约了资源的使用。

参见

<application>

<activity>

引入版本

API Level 1

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注