我们知道,进程间是不允许直接通信的,不能直接拿另外一个进程的数据。但是现在有这么一个需求,我就想让别人使用我的数据。所以这里引出了要说的进程间通信(IPC)。
android给我们提供了一套规则,就可以实现跨进程间的通信,这套规则就是AIDL(android interface definition lanuage)安卓接口定义语言。
使用步骤:
1、要访问的远程文件IService,它是一个接口,后缀名修改为aidl
2、在工程中找到目标工程,进行刷新
3、找到目标文件,此时已经是aidl后缀了,文件会报错,把文件里面的public去掉就行
4、同时gen目录下,有自动生成一个IService文件,打开文件文件内容如下,关注我标识的部分,Stub继承了Binder类实现了IService类
5、而我的服务类ServiceDemo中继承实现关系如下
6、也就是说我的ServiceDemo做的事情,Stub已经帮我做了,所以我把继承、实现关系修改为,继承IService的Stub类
7、要访问的远程服务已经修改完毕。现在在我的另外一个工程中要使用这个远程服务。
8、把远程服务aidl文件拷贝到我的工程中,注意这里需要创建一个包,包名和远程aidl文件所在的包名一致,aidl文件放在这个包下。
9、拷贝过来后,此时我的工程gen目录下也会生成相应IService文件,打开文件,关注内容如下,意思就是说把一个IBinder对象传给它,它就可以把那个对象转成IService的接口
10、然后在自己的工程文件下使用如下代码,拿到远程服务的对象binder,就可以调用远程服务的方法、数据了。