android进程间的通信

mac2022-06-30  195

我们知道,进程间是不允许直接通信的,不能直接拿另外一个进程的数据。但是现在有这么一个需求,我就想让别人使用我的数据。所以这里引出了要说的进程间通信(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,就可以调用远程服务的方法、数据了。

 

转载于:https://www.cnblogs.com/MarsDabiaoge/p/5130948.html

最新回复(0)