1. 程式人生 > >Binder通訊原理簡介圖

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