Android Binder -1
Binder -1
IPC
Android基于Linux内核,Linux内核继承和兼容了Unix的进程间通信机制,故进程间通信机制(IPC,Inter-Process Communication)代代相传。
下面简单介绍IPC的定义,总结主要的IPC方法、系统环境及其特点:
进程间通信(IPC,Inter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法。
使用IPC的理由:
- 数据及信息共享、传输
- 模块化
- …
Android IPC——Binder
Binder最初由Be.Inc开发的openBinder项目,被Palm.Inc收购,主要开发人员Dianne Hackborn转移到Google.Inc Android平台开发。Dianne Hackborn现在是Android 平台架构师。
主要用途:
- APP之间通信及数据共享,如第三方应用通过ContentProvider读取手机通讯录、第三方应用间数据共享、第三方应用内多进程数据共享;
- 提供系统服务,并进行模块化解耦,如、AMS、PMS、WMS;
为何选择?不可而知,可能是针对Android硬件性能差内存低的特点?
- 性能高效,数据拷贝次数少,仅次于共享内存(不用拷贝);
- 安全性高,传统IPC方式无法鉴别有效身份;采用C/S架构易于权限控制;
- 使用简单,对Binder进行面向对象的封装;
- …
谁是更好的选择? 根据具体场景选择IPC方式:
- OS的Zygote进程采用Socket机制;
- Android Kill Process使用signal机制;
- Binder更多用于System Server进程与上层APP层的IPC交互;
- …
Binder是什么?多个角度看
- 一种Android实现进程间通信的机制
- 一种虚拟的物理设备驱动
- 一个实现了IBinder接口的类
- …
Binder架构
Binder的完整架构设计的层比较多,比较复杂,总的来说包括以下几层:
- Framework层,Binder的C/S架构
- JNI层,连接层
- Native层,Binder的C/S架构
- Kernel层,Binder驱动
Binder的使用——APP应用开发
APP如何使用Binder?
- 定义AIDL(Android Interface Definition Language)文件;
- 定义Parcel数据;
- 定义Client端,实现AIDL接口;
- 定义Server端,实现AIDL接口;
涉及的内容:
- 接口定义:AIDL语法;
- 数据传输格式:Parcel序列化;
- Binder连接:AIDL生成Binder接口;
- 连接状态回调:死亡代理;
自定义系统服务——Framework系统开发
Framework如何自定义系统服务?
- 定义AIDL文件;
- 定义数据格式;
- 定义系统Service,实现AIDL接口;
- 封装Manager Client,实现Service调用;
- 进行F接口解耦,提供SDK编译与运行依赖隔离;
参考资料
- https://blog.****.net/carson_ho/article/details/73560642 Android跨进程通信:图文详解 Binder机制 原理
- https://www.zhihu.com/question/39440766/answer/89210950 为什么 Android 要采用 Binder 作为 IPC 机制? Gityuan的回答
- https://blog.****.net/gatieme/article/details/50908749 Linux进程间通信的几种方式总结–linux内核剖析(七)