概述
Binder做为Android中核心机制,在Android中用于跨进程通信,Activity,Service等组件相互通信都是先和AMS通信,然后通过。
Binder是一种进程间的通信机制
Binder是虚拟物理设备的驱动
Binder是能发起通信的java类
Binder在各个层都有实现。
Binder | 共享内存 | Socket | |
---|---|---|---|
性能 | 拷贝一次,性能较高 | 无需拷贝,高 | 拷贝两次,差一点 |
使用 | 基于C/S架构,好用 | 控制复杂,不好用 | 基于C/S,传销效率低,开销大 |
安全 | 每个APP都有单独的UID,支持实名和匿名 | 依赖上层协议,访问接入点是开发的,不太安全 | 依赖上层协议,访问接入点是开发的,不太安全 |
Binder是Android中一种跨进程通信方式
一种虚拟的物理设备,设备驱动为/dev/binder,该通信方式在Linux中没有
从Framwork层
Binder是ServiceManager连接各种Manager(ActivityManager、WindowsManager等待)和相应ManagerService的桥梁
从应用层
Binder是客户端与服务端进行通信的媒介,当bindService的时候,服务端会返回一个包含了服务端业务调用的Binder对象,通过这个Binder对象,客户端就可以获取服务端提供的服务或数据,这里的服务包含普通服务和AIDL的服务。
Binder主要用在Service。
- 客户端进程与ServiceManager通信获得AMS的IBinder。
- 客户端通过AMS的IBinder与AMS通信,请求bindService。
- AMS与服务端进行通信执行onBind。
- 服务端进程与ServiceManager通信获取AMS的IBinder。
- 服务端进程通过AMS的IBinder与AMS通信,发布自己的IBinder给AMS.
- AMS与客户端通信,转发服务端的IBinder(代理BinderProxy)