最近即将作的一个项目里面须要使用到AIDL(Android Interface Definition Language:接口描述语言)技术,就在麦子学院android开发视频教程上简单瞄了一眼,个人理解它和java中的RMI的概念差很少,因而就本身尝试的测试了下。废话不说了,直接开始
一、既然AIDL是既然是能够在不一样进程间进行操做,那么咱们首先就须要准备两个项目,咱们先来看看不一样的两个项目结构式什么样子的。如图:
java
咱们先暂且定义一个项目为“服务器端项目”,一个为“客户端项目”,其中紫色线框里面的东西是第一个须要注意的地方,就是无论你两个项目包名有多大差别,可是aidl文件必须放置在同一个包下面,并且名字也要相同。
二、咱们如今建立好了项目,下一步就是开发调用接口和实现方法了。其实aidl文件在这里就充当的是一个interface类,你能够在它里面写上你要公布给客户端的调用接口。(具体代码我就不写了,你们能够看我上传的项目)在写aidl接口时,须要注意的是:类命必须和你的aidl文件名相同;必须指明当前包路径;若是是经常使用类型,如:String、List、int、void之类的,就不须要导入所在包路径了,当使用了外部类时,就须要导入这个类所在的包路径了;书写方法时,每一个参数必须指定in或out来代表它是输入参数仍是输出参数。
三、既然aidl咱们写完了,那么接下来固然是要去实现这个接口,让它来帮咱们作事情了,Aidl由于是远程调用,因此这里你的实现类必须是一个继承Service的类,而后在这个实现类中再去作aidl的实现方法。上图中TestService就是个人实现类,具体代码也请看我上传的项目。不过在TestService须要注意的就是,onBind方法必定要返回你实现的aidl实例对象,供远程调用方使用
public IBinder onBind(Intent intent) {
return binder;
}
四、服务端manifest.xml中须要进行以下配置,否则你客户端调用会没法得到你的aidl对象的,我以前作测试的时候,一直被这个问题困扰。
<serviceandroid:name="TestService" android:process=":remote">
<intent-filter>配置你的AIDL接口完整路径
<actionandroid:name="com.lifeblood.ITestService" />
</intent-filter>
<rvice>
五、作完了服务器的工做后,咱们再开始作客户端的工做。客户端其实就很简单了,把服务器的aidl拷贝过来,建立一个ServiceConnection用来获得远程onBind中传递过来的aidl接口对象,而后在启动的时候进行一次绑定bindService就能够开始使用aidl中的方法了。
android
更多android开发教程尽在:http://www.maiziedu.com/course/android/web