一、AIDL Service简介
Android系统中,各个应用都运行在自己的进程中,进程之间一般无法直接进行通信,为了实现进程通信(interprocess communication,简称IPC),Android提供了AIDL Service;
二、与本地Service不同
-
本地Service:直接把IBinder对象本身传递给客户端的ServiceConnection的onServiceConnected方法的第二个参数;
-
远程Service:只将IBinder对象的代理传给客户端的ServiceConnection的onServiceConnected方法的第二个参数;
三、AIDL文件
Android需要AIDL(Android Interface Definition Language)来定义远程接口,这种接口定义语言并不是一种真正的变成语言,只是定义两个进程之间的通信接口;
与Java接口相似,但是存在如下几点差异:
-
AIDL定义接口的源代码必须以.aidl结尾;
-
AIDL用到的数据类型,除了基本类型、String、List、Map、CharSequence之外,其它类型全部都需要导包,即使它们在同一个包中也需要导包;
四、使用AIDL的步骤(详细代码可见AIDLService和AIDLClient项目)
1.创建AIDL文件
定义好AIDL文件后,ADT工具会自动在gen/com/example/aidlservice/目录下生成一个ICat.java接口,该类内部包含一个Stub内部类,实现了IBinder,ICat两个接口,这个Stub类会作为远程Service回调类;
2.将接口暴露给客户端
在AndroidManifext.xml文件中配置该Service;
3.客户端访问AIDLService
将Service端的AIDL文件复制到客户端中,注意要在相同的包名下。
错误:java.lang.SecurityException: Binder invocation to an incorrect interface。在使用上请注意,服务端与客户端都要有相同的接口(使用到的),这里的“相同”是指完全相同,包括包名,也就是说要在不同工程下建立相同的包名。
本文详细介绍Android系统中AIDL Service的工作原理及其实现过程,包括AIDL文件的定义、远程接口暴露方式、客户端访问机制等核心内容。

2万+

被折叠的 条评论
为什么被折叠?



