今天写了个service,注册过程中对一些属性不是很熟悉,就查了一些资料,在此做个整理,跟大家分享一下。
Service是Android四大组件之一,是与Activity最相似的组件,它们的区别在于:Service一直在后台运行,它没有用户界面。一旦Service被启动起来之后,它就与Activity一样,也具有自己的生命周期。下面是在清单文件中配置一个service是需要设置的一些属性:
<service
android:enabled=["true" | "false"]
android:exported=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permission="string"
android:process="string">
········
</service>
简单说一下每个属性
(1)android:enabled 这个属性用于指示该服务是否能够被实例化。如果设置为true,则能够被实例化,否则不能被实例化。默认值是true。<application>元素有它自己的enabled属性,它的这个属性适用于应用中所有的组件。
(2)android:exported 这个属性用于指示该服务是否能够被其他应用程序组件调用或跟它交互。如果设置为true,则能够被调用或交互,否则不能。设置为false时,只有同一个应用程序的组件或带有相同用户ID的应用程序才能启动或绑定该服务。没有过滤器则意味着该服务只能通过指定明确的类名来调用,这样就是说该服务只能在应用程序的内部使用(因为其他外部使用者不会知道该服务的类名),因此这种情况下,这个属性的默认值是false。如果包含了至少一个过滤器,则意味着该服务可以给外部的其他应用提供服务,因此默认值是true。
(3) android:icon 绘制该服务的图标,应用资源文件。如果这个属性没有设置,则会使用<application>元素的icon属性所设定的图标来代替。
(4) android:process 这个属性用于设定服务所运行的进程名称。通常,应用程序的所有组件都运行在给应用程序创建的进程中,进程名与应用程序的包名相同。如果这个属性值用“:”开头,则在需要的时候系统会创建一个新的,应用程序私有的进程,并且该服务也会运行在这个进程中。如果这个属性值用小写字母开头,那该服务就会运行在以这个属性值命名的全局进程中,它提供了使其工作的权限。这样就允许不同的应用程序组件来共享这个进程,从而降低资源的使用。
(5)android:permission 这个属性定义了要启动或绑定服务的实体必须要有的权限。
(6)android:name 这个属性用于指定实现该服务的Service子类的类名。它应该是完整的Java类名(如:com.example.project.MyService),也可以简写为(.MyService)。一旦发布了应用程序,就不应该改变这个名称(除非android:exported=”false”)。这个属性没有默认值,名称必须要指定。
(7)android:label 这个属性用于设定一个要显示给用户的服务的名称。如果没有设置这个属性,则会使用<application>元素的label属性值来代替。