Moosphan/Android-Daily-Interview

2019-07-24:请谈谈你对Binder机制的理解?

Moosphan opened this issue · 10 comments

2019-07-24:请谈谈你对Binder机制的理解?

Binder是Android是一种跨进程的通信的方式,下面几篇文章对Binder进行了详细介绍

  1. 让你了解Binder机制作用以及图解 https://www.jianshu.com/p/225ccd39a667
    2.https://blog.csdn.net/cike110120/article/details/86101700

1.性能稳定;数据传输比传统的数据传输较快。只需一次拷贝数据;高效率
2.数据安全;采用唯一的uid,当安装一个应用app时;系统会为其分配一个uid;一块内存空间;因此进程uid是鉴定进程身份重要标志。
一般接触接触到framework部分比较多一点,也难免要和Binder打一些交道,

Binder:Binder是android里一种自带的进程通信方式,我们常用的aidl、广播等方式都是基于binder实现的;
binder采用C/S架构,server需要向安卓里的ServiceManager进程注册(该进程的server引用由一个特殊的方式得到,不会出现自相矛盾的情况),由该进程管理;client则通过ServiceMagager获取到server的代理引用,然后向其发起通信
binder的优点:相对于linux自带的一系列通信方式,binder是性能和安全性的折中实现(如其他方式都可以轻易伪造调用者的身份信息,而binder不行)
binder有一个特殊的binder线程池,专门用来处理binder事务
binder淡化了进程的边界,整个系统仿佛运行在同一个进程中,而又有单进程不具有的安全性等
推荐文章:Binder学习指南

Binder是夸进程通信的其中一种方式,aidl,广播的底层都是基于binder实现的。
binder采用c/s架构,server需要向安卓的Servicemanager进程注册,由该进程管理。client则通过Servicemanager获取到server的代理引用,然后向其发起通信。
优点:相对于其他方式,binder是性能和安全性折中实现
binder有一个binder线程池,专门用来处理binder事物

IT666 commented

Binder机制:
1.为了保证进程空间不被其他进程破坏或干扰,Linux中的进程是相互独立或相互隔离的。
2.进程空间分为用户空间和内核空间。用户空间不可以进行数据交互;内核空间可以进行数据交互,所有进程共用一个内核空间。
3.Binder机制相对于Linux内传统的进程间通信方式:(1)性能更好;Binder机制只需要拷贝数据一次,管道、消息队列、Socket等都需要拷贝数据两次;而共享内存虽然不需要拷贝,但实现复杂度高。(2)安全性更高;Binder机制通过UID/PID在内核空间添加了身份标识,安全性更高。
4.Binder跨进程通信机制:基于C/S架构,由Client、Server、Server Manager和Binder驱动组成。
5.Binder驱动实现的原理:通过内存映射,即系统调用了mmap()函数。
6.Server Manager的作用:管理Service的注册和查询。
7.Binder驱动的作用:(1)传递进程间的数据,通过系统调用mmap()函数;(2)实现线程的控制,通过Binder驱动的线程池,并由Binder驱动自身进行管理。
8.Server进程会创建很多线程处理Binder请求,这些线程采用Binder驱动的线程池,由Binder驱动自身进行管理。一个进程的Binder线程池默认最大是16个,超过的请求会阻塞等待空闲的线程。
9.Android中进行进程间通信主要通过Binder类(已经实现了IBinder接口),即具备了跨进程通信的能力。

binder机制 是一种 android 进程通信机制
通信过程 由 client server serviceManager binder驱动组成
首先 所有的server都会在 serviceManager 中注册
client 访问 server时 要向 serviceManager 发起请求,
serviceManager 找到 这个 server 并通过 binder驱动 生成一个 server代理 返回给client
client得到了 代理之后 访问 代理server
代理server 相应方法被调用后 会向 binder驱动中去调用真正的server方法