对android binder的一些疑问及解答

1上层做了那么多封装是否是过度了,难度增加就在于上层的一层层的封装。


    最底层直接ioctl和binder驱动交互(单纯c语言实现binder交互)
    第一层:IPCThreadState.transatct封装了对驱动的请求和接受
    第二层封装用IBinder.h里面的 transatct一个方法是最直接和容易理解的
    第三层封装: 服务端bbinder在 transatct里面抽象出了一个 模板方法onTransatct
    第四层封装:引入通信协议接口 ,以及bpbinder bbinder 对象,这样客户端和服务端就可以调用对象来执行传输,而不是简单的根据参数来一一对应
    至于如何封装的,这块应该是binder里面最难的了,当成盲盒吧,因为即使看明白了也会很快就忘,和后期的问题跟踪或解决关系也不大,基本永不上
    第五层封装:就是用aidl进行封装,主要是对协议接口的parcel数据自动打包和解包的封装以及自动生成bpbinder,bbinder对象
    每一层都对使用者来说都会变得更方便,但也隐藏了背后的原理。


    2 parcel的作用,传个值不是直接就可以吗

跨进程传递数据为什么要用parcel封装一层? parcel在flatten和unflaten里面会加入handler或binder的值,意思是类似与给快递加上了地址


    3 代理端是真的代理设计模式吗

其实就是代理端拿到了服务端的地址(handler),交给了驱动,驱动根据地址将数据放到服务端那里,并通知服务端
    之所以要设计出代理的这个概念,完全是上层封装虚拟出来的一个概念,其实并不是代理模式,代理类里并没有被代理对象的引用,只是一个简单的映射关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值