android开发入门笔记:AIDL简单入门
2015-07-23 14:32
387 查看
最近即将做的一个项目里面需要使用到AIDL(Android Interface Definition Language:接口描述语言)技术,就在麦子学院android开发视频教程上简单瞄了一眼,我的理解它和java中的RMI的概念差不多,于是就自己尝试的测试了下。废话不说了,直接开始
1、既然AIDL是既然是可以在不同进程间进行操作,那么我们首先就需要准备两个项目,我们先来看看不同的两个项目结构式什么样子的。如图:
![](http://img.mamicode.com/up/m/151272/info/20150723141248_1005.png)
我们先暂且定义一个项目为“服务器端项目”,一个为“客户端项目”,其中紫色线框里面的东西是第一个需要注意的地方,就是不管你两个项目包名有多大差异,但是aidl文件必须放置在同一个包下面,而且名字也要相同。
2、我们现在创建好了项目,下一步就是开发调用接口和实现方法了。其实aidl文件在这里就充当的是一个interface类,你可以在它里面写上你要公布给客户端的调用接口。(具体代码我就不写了,大家可以看我上传的项目)在写aidl接口时,需要注意的是:类命必须和你的aidl文件名相同;必须指明当前包路径;如果是常用类型,如:String、List、int、void之类的,就不需要导入所在包路径了,当使用了外部类时,就需要导入这个类所在的包路径了;书写方法时,每个参数必须指定in或out来表明它是输入参数还是输出参数。
3、既然aidl我们写完了,那么接下来当然是要去实现这个接口,让它来帮我们做事情了,Aidl因为是远程调用,所以这里你的实现类必须是一个继承Service的类,然后在这个实现类中再去做aidl的实现方法。上图中TestService就是我的实现类,具体代码也请看我上传的项目。不过在TestService需要注意的就是,onBind方法一定要返回你实现的aidl实例对象,供远程调用方使用
public IBinder onBind(Intent intent) {
return binder;
}
4、服务端manifest.xml中需要进行如下配置,不然你客户端调用会无法获得你的aidl对象的,我之前做测试的时候,一直被这个问题困扰。
<serviceandroid:name="TestService" android:process=":remote">
<intent-filter>配置你的AIDL接口完整路径
<actionandroid:name="com.lifeblood.ITestService" />
</intent-filter>
<rvice>
5、做完了服务器的工作后,我们再开始做客户端的工作。客户端其实就很简单了,把服务器的aidl拷贝过来,创建一个ServiceConnection用来得到远程onBind中传递过来的aidl接口对象,然后在启动的时候进行一次绑定bindService就可以开始使用aidl中的方法了。
1、既然AIDL是既然是可以在不同进程间进行操作,那么我们首先就需要准备两个项目,我们先来看看不同的两个项目结构式什么样子的。如图:
![](http://img.mamicode.com/up/m/151272/info/20150723141248_1005.png)
我们先暂且定义一个项目为“服务器端项目”,一个为“客户端项目”,其中紫色线框里面的东西是第一个需要注意的地方,就是不管你两个项目包名有多大差异,但是aidl文件必须放置在同一个包下面,而且名字也要相同。
2、我们现在创建好了项目,下一步就是开发调用接口和实现方法了。其实aidl文件在这里就充当的是一个interface类,你可以在它里面写上你要公布给客户端的调用接口。(具体代码我就不写了,大家可以看我上传的项目)在写aidl接口时,需要注意的是:类命必须和你的aidl文件名相同;必须指明当前包路径;如果是常用类型,如:String、List、int、void之类的,就不需要导入所在包路径了,当使用了外部类时,就需要导入这个类所在的包路径了;书写方法时,每个参数必须指定in或out来表明它是输入参数还是输出参数。
3、既然aidl我们写完了,那么接下来当然是要去实现这个接口,让它来帮我们做事情了,Aidl因为是远程调用,所以这里你的实现类必须是一个继承Service的类,然后在这个实现类中再去做aidl的实现方法。上图中TestService就是我的实现类,具体代码也请看我上传的项目。不过在TestService需要注意的就是,onBind方法一定要返回你实现的aidl实例对象,供远程调用方使用
public IBinder onBind(Intent intent) {
return binder;
}
4、服务端manifest.xml中需要进行如下配置,不然你客户端调用会无法获得你的aidl对象的,我之前做测试的时候,一直被这个问题困扰。
<serviceandroid:name="TestService" android:process=":remote">
<intent-filter>配置你的AIDL接口完整路径
<actionandroid:name="com.lifeblood.ITestService" />
</intent-filter>
<rvice>
5、做完了服务器的工作后,我们再开始做客户端的工作。客户端其实就很简单了,把服务器的aidl拷贝过来,创建一个ServiceConnection用来得到远程onBind中传递过来的aidl接口对象,然后在启动的时候进行一次绑定bindService就可以开始使用aidl中的方法了。
相关文章推荐
- android postDelayed方法实现定时器
- Android碎片第一期
- 出现Error inflating class android.support.v7.widget.RecyclerView错误的解决办法
- android 命令获取手机中项目数据库
- Android 获取当前资源对象的屏幕信息
- android基础知识之AIDL简单入门
- android基础知识之AIDL简单入门
- Android源码之陌陌源码
- Android Service 不被杀死并提高优先级
- Android中adb push和adb install的使用区别
- Android下载并安装APK
- android学习——应用界面编程
- Android Binder机制原理(史上最强理解,没有之一)
- 基于Ubuntu 15.04 LTS编译Android5.1.0源代码
- 【Android杂谈】安卓手机与传感器通信
- Android应用程序签名(官方文档中文版)
- Android Studio常见问题
- 启动Android Studio时,可能弹出“Fetching Android SDK component information”
- android开发动画总结二(frame animation)
- Android获取View 的坐标和屏幕高度、状态栏高度、标题栏高度