android学习笔记

Binder学习笔记

2020-03-18  本文已影响0人  heheworld

其实也不算学习笔记了,整理下几位大拿写的文章,自己回顾加深下印象

基础概念
Binder 相较其他进程间通信的优势,
Binder 通信过程简述

通信过程,主要有下列几个角色

  1. Client 客户端,发送请求的一方。
  2. Server 服务端,提供服务的一方。
  3. ServiceManager 服务管理方。
  4. Binder 驱动,我理解为中介。

大概流程,

  1. 首先一个进程通过Binder 申请成为ServiceManager。
  2. 其他新建的Server 通过Binder 在ServiceManager注册留名(地址)。
  3. Client 需要跟 Server通信时,会通过Binder ,在ServiceManager中查找对应的Server。
  4. 如果ServiceManager 中有需要的Server,会通过Binder返回一个Server的代理对象给Client。
    **需要注意的是,
    Client端取到的对象并不是真正的对象,而是一个代理对象。
    ServiceManager,Server,Client 不在同一个进程,他们之间通信都是基于Binder的,而对应的Client拿到的对象其实都是代理对象。
    **

Binder到底是什么呢

我觉得这篇文章总结的很好
关于binder的总结

我们经常提到Binder,那么Binder到底是什么呢?
Binder的设计采用了面向对象的思想,在Binder通信模型的四个角色里面;他们的代表都是“Binder”,这样,对于Binder通信的使用者而言,Server里面的Binder和Client里面的Binder没有什么不同,一个Binder对象就代表了所有,它不用关心实现的细节,甚至不用关心驱动以及SM的存在;这就是抽象。
通常意义下,Binder指的是一种通信机制;我们说AIDL使用Binder进行通信,指的就是Binder这种IPC机制。
对于Server进程来说,Binder指的是Binder本地对象
对于Client来说,Binder指的是Binder代理对象,它只是Binder本地对象的一个远程代理;对这个Binder代理对象的操作,会通过驱动最终转发到Binder本地对象上去完成;对于一个拥有Binder对象的使用者而言,它无须关心这是一个Binder代理对象还是Binder本地对象;对于代理对象的操作和对本地对象的操作对它来说没有区别。
对于传输过程而言,Binder是可以进行跨进程传递的对象;Binder驱动会对具有跨进程传递能力的对象做特殊处理:自动完成代理对象和本地对象的转换。

总结的差不多了,其实我觉得关于过往的知识点,每次去回顾的时候,认识会更深入一点,同时也可能会与新学习到的知识有关联,渐渐的有‘窥一斑而知全豹’的感觉,古人常说的‘温故而知新’,大概就是如此吧。

上一篇 下一篇

猜你喜欢

热点阅读