android service 值得注意的地方(2)

来源:互联网 发布:网络括扑结构图 编辑:程序博客网 时间:2024/05/21 06:20
Bound Services:
1.     提供服务端和客户端之间的交互,可以发送请求,获得服务等

2.     通过实现OnBind()方法,返回一个IBind对象,来完成服务端到客户端之间的连接。     

3.     OnBind()方法只调用一次,当第一个客户端连接服务的时候,系统调用一次OnBind()方法,并返回一个IBind对象。当其他客户端连接服务的时候,使用该IBind对象。

4.     创建一个Bind接口的三种方法:
1)     扩展Binder类:当service对于自己的应用是私有的时候,并且和客户端运行在同一个进程中,使用这种方法。
2)     使用消息:当交互是在不同的进程当中时,使用这种方式。这种方式,客户端可以通过消息向服务端发送命令,服务端也可以返回消息。这是进程间通信最简单的方式,因为消息队列只要求一个单线程,所以不需要考虑线程安全。这种方式一次只能接受一个请求。
3)     使用AIDL:AIDL将所有的工作分解成操作系统可以理解,并且可以在不同进程间通过的对象。要想同时接收多个服务端的请求,就需要使用这种方式。这时,就需要考虑多线程和线程安全了。使用.aidl文件来定义接口。

AIDL:
1.     AIDL类似于其他IDL,主要用于进程间的通信。在Android当中,不允许通常的方式来访问内存中的其他进程。需要将访问操作分解为android系统能理解并可以访问进程的对象。AIDL可以完成这种工作。Note:当需要跨进程访问时,并且要使用多线程的时候,就使用AIDL,否则,可以使用扩展Binder类和消息,没必要使用AIDL.

2.     使用AIDL步骤:
1)     在src下受用java语言建立一个.aidl文件,里面通过方法签名定义编程接口。
2)     实现这个接口。接口里有一个Stub的内部抽象类,你必须继承它并实现它的方法。
3)     将接口暴露给服务端。
Note:AIDL文件的修改应该做到向后兼容,以便所有的应用都能使用服务。

3.     AIDL所支持类型:java语言的基本类型,如int;String,list,map,CharSequence

4.     定义服务接口的几点:
1)     方法可以接收零个或多个参数,可返回也可不返回值。
2)     所有非原始性参数必须给一个方向性标签,如in,out。
3)     AIDL文件中所有的代码注释都包含在生成的IBind接口中,引入包之前的注释除外。
4)     不能暴露静态域。
原创粉丝点击