Pich Blog

关注移动开发,大数据,云计算,软件架构!

10.AIDL实现IPC-基础实例

概述

前面已经说了怎么使用,这里就不在说怎么使用了,直接上实例。

实现步骤

服务端

需要创建一个service监听客户端发送来的请求,然后创建一个AIDL文件,将我们需要提供给客户端的方法暴露出去,最后在service中实现AIDL文件中方法。

客户端

绑定service,然后将返回的Binder转为AIDL接口里面的Binder的,这样客户端就可以调用服务端的方法了。

图书管理服务端

这里模拟将服务端模拟为一个书籍管理系统,客户端可以添加书籍,还可以获取所有书籍。

创建接口

创建一个接口,在这里面暴露我们要提供给客户端的方法。

并不是所有的数据类型他都支持,详情查看AIDL支持的数据类型

实现服务端service

创建一个service,然后创建一个集合,用来装所有的书籍,这是用集合是为了演示。生产中可以是任意数据源。

需要注意的是这里使用了CopyOnWriteArrayList,这是因为他支持并发读写,因为AIDL方法是在服务端的Binder线程池中执行的,当有多个客户端时就会并发,用这个集合我们就不需要自己线程同步了。

那上面我们说了他支持ArrayList呀,这是因为AIDL中所支持的是抽象的List,而List是一个借口,虽然服务端返回的是一个CopyOnWriteArrayList,但是Binder会按照List的规范去访问数据并生产一个新的ArrayList返回给客户端。

注册Service

客户端调用服务

首先是绑定service,然后将服务端返回的service转为IBookManager.Stub。就可以调用服务端的方法了:

可以发现输出的还是ArrayList。可以当我们添加一本书时,还需要自己的查询一下。如果我想实时支持添加输了,是不是还得搞个循环,显然这是不好的。解决方法请关注下一节。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注