Android开发Android开发经验谈Android技术知识

Framework笔记 | binder详解

2019-09-14  本文已影响0人  凌川江雪
谈谈你对binder的理解

思路:

  • binder是干嘛的(注意拓展)
  • binder存在的意义是什么?
    为什么不用别的替代方案呢?(主要分三点展开)
  • binder的架构原理是怎样的?
    (可以把架构图画出来,对着图讲)

binder是干嘛的

通信


远程调用机制常规套路


机制需要注意的问题

所以一套好用的远程调用机制还是很复杂的,
需要兼顾性能、方便、安全等因素,
而Binder机制,就是这么一个好机制!



binder存在的意义是什么

以上三点足够说明Binder存在的意义


Binder的通信架构


进程如何启动binder机制?

这样binder驱动就会为进程创立一套档案;

用这个描述符去进行内存映射,分配缓冲区(接下来的binder通信需用到缓冲区);

启动binder线程,
一方面是要把这个线程注册到Binder驱动,
另一方面这个线程要进入Loop循环,不断地跟binder驱动进行交互;

binder通信

ServiceManager
binder的loop循环

函数中,

相关阅读: 图一 图二

ServiceManager总的流程就如上了;

接着往下,回顾架构图:


以系统服务SurfaceFlinger,观察系统服务是怎么在ServiceManager注册的

系统服务是在ServiceManager注册的整个流程就是如上这样;


看一下defaultServiceManager()的实现


接着看一下addService()的实现

小结,addService()的作用:

  1. 保存诸多数据到Parcel中,尤其注意Service系统服务的binder对象也写到Parcel实例data中;
  2. 调用transact(),进行后续的逻辑;


接着看IPCThreadStatetransact()函数


接着看请求在Server端是怎么处理的

在Server端注册就差不多是这样了;
至于Client端从ServcieManager获取系统服务的原理跟这个差不多;


Binder通信的分层架构图

通过这个架构图我们回顾一下刚刚讨论的知识点:


这个图我们可以分成几个维度来看,







Binder和BinderProxy是IBinder的子类;

上一篇下一篇

猜你喜欢

热点阅读