之使用AIDL如何实现跨进程c语言调用外部程序Service

AIDL服务只支持有限的数据类型因此,如果用AIDL服务传递一些复杂的数据就需要做更一步处理AIDL服务支持的数据类型如下:

AIDL的全称是什么如何工作?能处悝哪些类型的数据

当B进程要去c语言调用外部程序A进程中的service时,并实现通信我们通常都是通过AIDL来操作的

首先我们在项目所在的目录下建┅个包 (包名自己指定),在包中创建一个IServer.aidl文件 如下图中标注1所示
ADT插件会在gen目录下自动生成一个IServer.java文件该类中含有一个名为IServer.stub的内部类,该內部类中含有aidl文件接口的get方法

在IService.aidl文件中我们自定义一个接口,含有方法get代码如下:

说明一:aidl文件的位置不固定,可以任意
然后定义自巳的MyServer类(如上图中标注2所示)在MyServer类中自定义一个内部类去继承IServer.stub这个内部类,实现get方法在onBind方法中返回这个内部类的对象,系统会自动将這个对象封装成IBinder对象传递给他的c语言调用外部程序者。MyServer代码如下:

为什么要指定c语言调用外部程序AIDL服务的ID,就是要告诉外界MyServer这个类能够被別的进程访问只要别的进程知道这个ID,正是有了这个ID,B工程才能找到A工程实现通信
说明:AIDL并不需要权限
首先我们要将A工程中生成的IServer.java文件拷贝到B工程中如下图:

 说明:如果我们单独将IServer.aidl文件放在一个包里,那个在我们将gen目录下的该包拷贝到B工程中如果我们将IServer.aidl文件和我们的其怹类存放在一起,那么我们在B工程中就要建立相应的包以保证IServer.java文件的报名正确,我们不能修改IServer.java文件

我要回帖

更多关于 linux内核态有几个进程 的文章

 

随机推荐