The Android Developer Challenge is back! Submit your idea before December 2.

<service>

语法:
<service android:description="string resource"
         android:directBootAware=["true" | "false"]
         android:enabled=["true" | "false"]
         android:exported=["true" | "false"]
         android:foregroundServiceType=["connectedDevice" | "dataSync" |
                                        "location" | "mediaPlayback" | "mediaProjection" |
                                        "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:description
向用户描述服务的字符串。您应将此标签设置为对字符串资源的引用,以便可以像对界面中的其他字符串那样对其进行本地化。
android:directBootAware

服务是否支持直接启动,即其是否可以在用户解锁设备之前运行。

注意:直接启动期间,应用中的服务仅可访问存储在设备保护存储区的数据。

默认值为 "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()stopService() 的调用者尚未获得此权限,该方法将不起作用,且系统不会将 Intent 对象传送给服务。

如果未设置该属性,则对服务应用由 <application> 元素的 permission 属性所设置的权限。如果二者均未设置,则服务不受权限保护。

如需了解有关权限的详细信息,请参阅简介的权限部分,以及单独的安全与权限文档。

android:process
将运行服务的进程的名称。正常情况下,应用的所有组件都会在为应用创建的默认进程中运行。该名称与应用软件包的名称相同。<application> 元素的 process 属性可为所有组件设置不同的默认进程名称。不过,组件可以使用自己的 process 属性替换默认值,让您可以将应用散布到多个进程中。

如果为此属性分配的名称以冒号(“:”)开头,则系统会在需要时创建应用专用的新进程,并且服务会在该进程中运行。如果进程名称以小写字符开头,则服务将在使用该名称的全局进程中运行,前提是它拥有相应的权限。如此一来,不同应用中的组件便可共享进程,从而减少资源使用。

另请参阅:
<application>
<activity>
引入的版本:
API 级别 1