前言:纸上得来终觉浅,凡知此事要躬行!平时不忙的时候习惯看书,看博客来提升自己,但是一段时间过后就会忘,所以总结还是非常有必要的,既加深自己的印象,也与人方便。
既然要演示进程间通讯,那就至少要有两个不同的进程。方便起见,这里就在一个项目增加一个进程
1.创建一个SubjectService作为服务端,并在AndroidManifest中注册,如何让SubjectService在一个新的进程中呢,很简单,只需增加一个属性"process",如图:
2.创建一个aidl文件类型的接口ISubjectManager.aidl,在其中定义暴露给客户端的抽象方法,我们可以借助AndroidStudio的功能来实现这一步。如图:
新建ISubjectManager.aidl文件后,左侧目录中会自动多了一个与java同级的aidl文件夹,如图:
在接口声明抽象方法,如图:
注意:即使Subject 和ISubjectManager在同一文件下,仍然要手动导入Subject。另外因为binder不能直接传递对象,所以我们要对Subject实现Parcelable,并且创建一个名为Subject的aidl文件。如图:
Subject.aidl中只需写如下内容即可,如图:
3.编译项目,就会生成一个java类型的ISubjectManger文件,如图:
4.接下来我们就可以利用ISubjectManager.java 来进行进程间通讯了。
服务端代码如图:
客户端代码如图:
注意客户端销毁的时候,及得解绑服务
打印结果日志:
好啦!到此一个基本的aidl使用流程就说完了,以上内容主要参考了《开发艺术与探索》,另外因本人水平有限,表述难免有不足之处,欢迎指正!