Binder机制

什么是Binder

  1. 直观来说,Binder是Android中的一个类,它继承了IBinder接口

  2. 从IPC角度来说,Binder是Android中的一种跨进程通信方式,Binder还可以理解为一种虚拟的物理设备,它的设备驱动是/dev/binder,该通信方式在linux中没有

  3. 从Android Framework角度来说,Binder是ServiceManager连接各种Manager(ActivityManager、WindowManager,etc)和相应ManagerService的桥梁

  4. 从Android应用层来说,Binder是客户端和服务端进行通信的媒介,当你bindService的时候,服务端会返回一个包含了服务端业务调用的Binder对象,通过这个Binder对象,客户端就可以获取服务端提供的服务或者数据,这里的服务包括普通服务和基于AIDL的服务

Binder属于android平台特有的IPC通道,也是进程间数据交互的核心内容。

安卓平台IPC方式总的来说有5种:
1、文件操作;
2、Messenger;
3、Provider;
4、AIDL;
5、Socket。
这五种方式中,2、3、4的实现都用到了Binder机制。

Binder设计结构理解

1、通信进程两端两个重要对象:一个是本地端的Proxy远程引用对象,一个是远程端的Stub实体对象
2、client端Proxy对象可以根据所定义的继承IInterface接口的相关约定方法来操作server端Stub实体类。
3、Android中在使用系统服务的时候通过getSystemService方法获取到的其实都是Stub把远端的Binder转化的对象,因为系统服务都是在system_server进程中,所以肯定是跨进程获取对象的,那么这个Binder对象其实就是上面的Proxy对象
4、除client和Proxy进程外,还存在者一个serverManager所在的进程(0号引用获取),用来存储proxy引用与stub实体的对应关系。
5、简单理解:ProxyBinder的transact方法调用后会同步(可异步)调用到Stub类的onTransact.这中间进程间数据的一次拷贝都是在系统空间的Binder驱动中完成。

官方图
模型原理图
应用层角度看-binder机制原理

参考
Android进程间通信(IPC)机制Binder简要介绍和学习计划
Android跨进程通信:图文详解 Binder机制 原理
Android Binder机制浅析
Binder机制原理

你可能感兴趣的:(Binder机制)