Binder機制詳解
什麼是Binder
-
直觀來說,Binder是Android中的一個類,它繼承了IBinder介面
-
從IPC角度來說,Binder是Android中的一種跨程序通訊方式,Binder還可以理解為一種虛擬的物理裝置,它的裝置驅動是/dev/binder,該通訊方式在linux中沒有
-
從Android Framework角度來說,Binder是ServiceManager連線各種Manager(ActivityManager、WindowManager,etc)和相應ManagerService的橋樑
-
從Android應用層來說,Binder是客戶端和服務端進行通訊的媒介,當你bindService的時候,服務端會返回一個包含了服務端業務呼叫的Binder物件,通過這個Binder物件,客戶端就可以獲取服務端提供的服務或者資料,這裡的服務包括普通服務和基於AIDL的服務
Binder屬於android平臺特有的IPC通道,也是程序間資料互動的核心內容。
安卓平臺IPC方式總的來說有5種:
1、檔案操作;
2、Messenger;
3、Provider;
4、AIDL;
5、Socket。
這五種方式中,2、3、4的實現都用到了Binder機制。
Binder設計結構理解
1、通訊程序兩端兩個重要物件:一個是本地端的Proxy遠端引用物件,一個是遠端端的Stub實體物件
2、client端Proxy物件可以根據所定義的繼承IInterface介面的相關約定方法來操作server端Stub實體類。
3、Android中在使用系統服務的時候通過getSystemService方法獲取到的其實都是Stub把遠端的Binder轉化的物件,因為系統服務都是在system_server程序中,所以肯定是跨程序獲取物件的,那麼這個Binder物件其實就是上面的Proxy物件
4、除client和Proxy程序外,還存在者一個serverManager所在的程序(0號引用獲取),用來儲存proxy引用與stub實體的對應關係。
5、簡單理解:ProxyBinder的transact方法呼叫後會同步(可非同步)呼叫到Stub類的onTransact.這中間程序間資料的一次拷貝都是在系統空間的Binder驅動中完成。

官方圖

模型原理圖

應用層角度看-binder機制原理

資料圖
需要資料的朋友可以加入Android架構交流QQ群聊:513088520
點選連結加入群聊【Android移動架構總群】: 加入群聊
獲取免費學習視訊,學習大綱另外還有像高階UI、效能優化、架構師課程、NDK、混合式開發(ReactNative+Weex)等Android高階開發資料免費分享。