开始介绍Binder连接池之前,我们先大致回顾一下AIDL的使用流程:首先创建AIDL接口,接着创建一个类实现接口中的Stub类并实现Stub中的抽象方法,在Service的onBind方法中返回这个类的对象,之后客户端就可以绑定服务端的Service,建立连接后就能访问服务端的方法。
更多AIDL使用方法Android深入理解IPC机制(三) Android中的几种IPC方式
当项目越来越庞大,需要十个甚至上百个AIDL来支撑业务需求,我们肯定不能创建100个Service,因为Service本身就是四大组件之一,是一种系统资源。为了解决这个问题,我们需要减少Service的数量,可以将所有的AIDL都放在一个Service中去管理。
上面提到的模式的工作机制是这样的:
- 每个业务有自己的AIDL接口和实现方法,但是不同业务之间是不能有耦合的,实现细节要单独开来,然后向服务端提供自己的唯一标识和对应的Binder对象
- 服务端负责提供一个queryBinder 接口,这个接口能根据业务的特征返回相应的Binder对象给他们,不同的业务模块拿到所需要的Binder对象就可以调用对应的服务端方法。由此可见,Binder连接池的作用就是将每个Binder请求转发到远程Service中去执行,避免重复创建Service。
image.png
为了更容易理解它的工作原理,我们可以把远程Service看成是一个Map容器,远程Service的queryBinder方法就类似于Map的get方法。每个AIDL和它对应的Binder对象就像是一个插入到Map的键值对,当某个业务需要使用自己的Binder对象的时候,就可以通过AIDL所对应的唯一识别码从Map内获取到对应的Binder对象。
推荐阅读
Android深入理解IPC机制(一)基础知识概要
Android深入理解IPC机制(二)浅谈Binder
Android深入理解IPC机制(三) Android中的几种IPC方式
参考书籍
《Android 开发艺术探索》
网友评论