《Android开发艺术探索》Ipc-2 binder连接池demo

应用场景:当一个项目越来越庞大,假如有10个业务模块都需要使用AIDL来进行进程间通信,按之前的方式,每一个业务都创建一个service进行处理。这种弊端在于,大量的业务模块,要建立大量的service和AIDL文件进行通信,service作为4大组件之一,本身就是一种系统资源,大量的service会使得我们的应用看起来非常重量级。

解决方法:binder连接池机制。在这种模式下,整个工作机制是这样的,每个业务模块创建自己的AIDL接口并实现此接口,这个时候不同业务模块之间是不能有耦合的,所有细节需要我们分开单独实现,然后向服务端提供自己的唯一标识和其对应的Binder对象;对于服务端来说,只需要一个service就可以了,服务端提供一个querybinder接口,这个接口能根据业务模块的特征来返回相应的Binder对象给他们,不同的业务模块拿到所需的Binder对象就可以进行远程方法调用了。

工作原理:

Demo地址:GIthub

注意点1:CountDownLatch的使用。由于binderService方法是异步调用,必须在onServiceConnect方法中,取到Ibinder对象后,才可以进行下一步,否则出现空指针。

BinderPoolUtils.getInstance(MainActivity.this);
//如果没有使用countDown处理过,会造成空指针
IBinder serviceAdd=BinderPoolUtils.getInstance(MainActivity.this).queryBinder(0);     
CountDownLatch 可参考这篇文章 跳转。简单来说, CountDownLatch 能使一个线程等待其他线程完成各自工作后再执行。


注意点2:binder链接池断开重连:




在binder连接断开时候,会调binderDied方法,在里面进行重连。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值