Binder通信原理简介图


本文基于android7.1。

Binder的作用的是跨进程通信,提供进程间交换数据。当然也适用于同一个进程间通信。

大致流程:客户端打包数据------>框架------->服务端------->返回结果到框架------->客户端



理解Binder通信最重要的就是把业务层和框架分开,

业务层就是客户端和服务端约定的接口,

框架层用于传递打包(Parcel)后的业务层数据。


下图为了便于理解,省略掉其他相关类,如 IBinder,  sp,Parcel等。

主要介绍框架相关的类:



Binder通信采用C/S架构,上图左边部分是Client ,主要包含BpBiner.cpp和BinerProxy.java, 右边是Server端,主要包含BBinder.cpp,JavaBBiner和Binder.java


按实现语言分层为: 驱动,C++, JNI, JAVA

1.驱动层:创建了文件节点 /dev/binder ,实现了读写文件的对应函数

\LINUX\android\kernel\drivers\staging\android\binder.c


2. C++ : 其中ProcessState是进程内唯一,IPCThreadState封装了传送数据的外层协议解析

\LINUX\android\frameworks\native\libs\binder

IPCThreadState.cpp

ProcessState.cpp

BBinder.cpp

BpBinder.cpp


3. JNI:定义了gBinderOffsets(对应Binder.java),gBinderProxyOffsets(对应BinderProxy)等结构体,及JavaBBiner

\LINUX\android\frameworks\base\core\jni\android_util_Binder.cpp


4. JAVA:Binder.java用于服务端,BinderProxy.java用于客户端(定义在Binder.java).BinderProxy的对象生成是在JNI层的javaObjectForIBinder方法中,在jni中对应gBinderProxyOffsets

\LINUX\android\frameworks\base\core\java\android\os\Binder.java




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值