<serviceandroid: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>
被包含于(CONTAINED IN):
<application>
可能包含的元素(CAN CONTAIN):
<intent-filter>
<meta-data>
说明(DESCRIPTION):
这个元素用于声明一个服务(Service类的子类)做为应用程序的组件之一。跟Activity不同,服务没有可见的用户界面。它们被用于实现长时的后台操做,或提供可以被其余应用程序调用的通讯API。
全部的服务都必须用清单文件中的<service>元素来表明。任何没有在清单中声明的服务都不能被系统看到,也不会被运行。
属性(ATTRIBUTES):
android:enabled
这个属性用于指示该服务是否可以被实例化。若是设置为true,则可以被实例化,不然不能被实例化。默认值是true。
<application>元素有它本身的enabled属性,它的这个属性适用于应用中全部的组件,包括service组件。对于被启用的服务,<application>和<service>元素的enabled属性都必须是true(默认值都是true)。若是有一个元素的enabled属性被设置为false,该服务就会被禁用,而不能被实例化。
android:exported
这个属性用于指示该服务是否可以被其余应用程序组件调用或跟它交互。若是设置为true,则可以被调用或交互,不然不能。设置为false时,只有同一个应用程序的组件或带有相同用户ID的应用程序才能启动或绑定该服务。
它的默认值依赖与该服务所包含的过滤器。没有过滤器则意味着该服务只能经过指定明确的类名来调用,这样就是说该服务只能在应用程序的内部使用(由于其余外部使用者不会知道该服务的类名),所以这种状况下,这个属性的默认值是false。另外一方面,若是至少包含了一个过滤器,则意味着该服务能够给外部的其余应用提供服务,所以默认值是true。
这个属性不是限制把服务暴露给其余应用程序的惟一方法。还可使用权限来限制可以跟该服务交互的外部实体。
android:icon
这个属性定义了一个表明服务的图标,它必需要引用一个包含图片定义的可绘制资源。若是这个属性没有设置,则会使用<application>元素的icon属性所设定的图标来代替。
不管是<application>元素设置的图标,仍是<service>元素所设置的图标,它们都是该服务全部的Intent过滤器的默认图标。
android:label
这个属性用于设定一个要显示给用户的服务的名称。若是没有设置这个属性,则会使用<application>元素的label属性值来代替。
不管是<service>设定的标签,仍是<application>元素设定的标签,它们都是该服务全部的Intent过滤器的默认标签。
这个标签应用引用一个字符串资源,以便它可以像用户界面中的字符串同样可以被本地化。可是,为了开发应用程序方便,也可使用原生字符串来设置这个属性。
android:name
这个属性用于指定实现该服务的Service子类的类名。它应该是完整的Java类名(如:com.example.project.RoomService)。可是,也可使用简写(如:.RoomService),系统会把<manifest>元素中package属性所设定的值添加到简写名称的前面。
一旦发布了应用程序,就不该该改变这个名称(除非android:exported=”false”)。
这个属性没有默认值,名称必需要指定。
android:permission
这个属性定义了要启动或绑定服务的实体必需要有的权限。若是调用者的startService()、bindService()和stopService()方法没有被授予这个权限,那么这些方法就不会工做,而且Intent对象也不会发送给改服务。
若是这个属性没被设置,那么经过<appliction>元素的permission属性所设定的权限就会适用于该服务。若是<application>元素也没有设置权限,则该服务不授权限保护。
android:process
这个属性用于设定服务所运行的进程名称。一般,应用程序的全部组件都运行在给应用程序建立的进程中,进程名与应用程序的包名相同。<application>元素的process属性可以给应用程序的全部组件设置一个不一样的默认名称。可是每一个组件本身的process属性都可以覆盖这个默认值,这样容许把应用程序分离到不一样的多个进程中。
若是这个属性值用“:”开头,则在须要的时候系统会建立一个新的,应用程序私有的进程,而且该服务也会运行在这个进程中。若是这个属性值用小写字母开头,那该服务就会运行在以这个属性值命名的全局进程中,它提供了使其工做的权限。这样就容许不一样的应用程序组件来共享这个进程,从而下降资源的使用。
再说几个service的属性标识 android
android:isolatedProcess="true" ,官方解释:经过指定的[[android:isolatedProcess="true"]]中的[[<service>]]标签,您的[[Service]]将在没有自身权限的被隔离的用户ID进程下运行。 sql
在android4.1中出现 chrome
隔离服务 ,说明这个service将在被隔离的用户id进程中运行。 app
具体应用实例: wordpress
http://sqliu.wordpress.com/2012/11/26/chrome-for-android%E7%9A%84sandbox%E6%9C%BA%E5%88%B6/ 性能
如何使用Message
zai service li
final Messenger mMessenger = new Messenger(new IncomingHandler());
public IBinder onBinder(Intent intent){
return mMessenger.getBinder();
}
在activity里的
onServiceConnected方法里
获得服务Messenger的引用
mServiceMessenger = new Messenger(service);
//向service注入本activity的Messenger的引用
Message msg = Message.obtain(null,
MessengerService.MSG_REGISTER_CLIENT);
msg.replyTo = mMessenger; //主要是经过replyTo将Messenger引用传过去
mService.send(msg);
这样,远程服务就能够与本activity进行通讯了,并且不须要写aidl方法
spa