从Android面试题目溯源-2、Android为什么要使用Binder机制

概念

Binder 是Android操作系统中用于进程间通信的一种机制

为什么使用Binder

相较于Linux提供的IPC机制,

  • Binder性能优势,仅需要一次拷贝,性能好于除共享内存外的IPC方式
  • 稳定性,C/S架构,架构清晰,调用双方职责明确
  • 安全性,Binder和Android深度绑定,可以做到更细粒度的权限控制,比如服务调用方权限检查,限制未声明权限的客户端访问敏感信息,UID和PID校验系统服务的访问权限等。

使用场景

Binder作为一种进程间通信(IPC)机制,具体场景为服务的实现和服务的调用为不同进程,原因是多方面的,我们可以从系统角度和应用角度来看。

  • 系统服务的获取,比如位置信息的获取,需要使用位置服务,通过Binder实现
  • Service和Activity通信,推送服务,后台音乐播放,需要UI主进程和后台进程独立
  • 跨应用程序通信,例如天气通讯录应用允许其他程序访问应用产生的数据或写入数据

重要的概念

  • Binder驱动: 负责管理Binder服务和客户端之间通信,位于Linux内核中
  • 数据格式:基础数据结构和实现了Parcelable的复杂数据结构
  • 代理(Proxy)代理客户端将方法调用转发到服务端
  • 存根(Stub)负责接收调用并执行相应的操作

个人理解

Binder机制是 Linux 共享内存的优化,受限于移动设备的特点,例如,设备性能较差,系统服务和跨进程调用频次更高。且对安全性要求细粒度可控,硬件资源紧张等特点。将自由分配的模式,改为集中管理 类比现实来看, 我们可以将Android系统想象成一个小区,每个App想象成业主, Binder驱动 想象成居委会,业主(App)是运行在沙盒当中无法出去,这是就需要业务员代理。
居委会有一份服务电话表和一些备忘录

  • 业主怎么知道居委会的存在呢?分配的房间有房间号19-1-1403和居委会固定电话001
  • 居委会怎么知道服务的存在,供暖公司入驻时提供了电话,业主入住时也声明了服务电话

现在模拟一个场景,业主S是个唱歌主播, 业主C想要点首《罗刹海市》

Binder流程
  1. C找到居委会电话,表达诉求,要求S唱首《罗刹海市》并附带五毛演出费
  2. 居委会将歌名记在备忘录上,并打视频电话给S,并将备忘录投屏给S
  3. S根据投射来的歌名开始找到伴奏并演唱
Linux共享内存
  1. S创建点歌台,接受有偿点歌
  2. C没有钱但点了一首《学猫叫》
  3. S唱了一半,C1清空了点歌台,导致S停止演唱

这是一个非常简化,甚至不太契合的场景,只有一次交互,甚至没有返回值,但有助于我们理解Binder的优势。

  • 性能:拷贝一次,拷贝到备忘录
  • 稳定:C睡着,或S唱完不影响彼此
  • 安全性:可以检查C有没有钱,房间号是否可以点歌

总结

Android Binder是一种和Android系统深度绑定的IPC机制,渗透在Android系统从硬件到软件的各个层面。最大程度的可控且适合移动端设备。

你可能感兴趣的:(android,binder)