Android Binder -1

Binder -1

IPC

Android Binder -1

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架构

Android Binder -1

Binder的完整架构设计的层比较多,比较复杂,总的来说包括以下几层:

  • Framework层,Binder的C/S架构
  • JNI层,连接层
  • Native层,Binder的C/S架构
  • Kernel层,Binder驱动

Binder的使用——APP应用开发

APP如何使用Binder?

  1. 定义AIDL(Android Interface Definition Language)文件;
  2. 定义Parcel数据;
  3. 定义Client端,实现AIDL接口;
  4. 定义Server端,实现AIDL接口;

涉及的内容:

  • 接口定义:AIDL语法;
  • 数据传输格式:Parcel序列化;
  • Binder连接:AIDL生成Binder接口;
  • 连接状态回调:死亡代理;

自定义系统服务——Framework系统开发

Android Binder -1

Framework如何自定义系统服务?

  1. 定义AIDL文件;
  2. 定义数据格式;
  3. 定义系统Service,实现AIDL接口;
  4. 封装Manager Client,实现Service调用;
  5. 进行F接口解耦,提供SDK编译与运行依赖隔离;

参考资料