Linux 進程通訊方法:socket 信號量 管道 共享內存 消息隊列。設計模式
可是Android 選擇了 binder 機制。安全
可能緣由:Socket 開銷大 且效率不高;管道和隊列copy次數太多。傳統的IPC通訊機制安全性較低,沒法獲得發送進程方可信的PID/UID ,難以甄別身份。socket
Binder 保證了安全性和效率。函數
binder 機制 四大模塊:設計
Client Server ServerManager BinderDriver server
client & server 爲用戶實現部分。隊列
BinderDriver 運行於內核空間,以字符設備中的misc類型註冊。能夠從/dev/binder/設備文件節點上,經過open和ioctl文件操做函數與binderDriver 通訊。進程
其主要負責通訊的創建,以及其在進程間的傳遞和binder 引用計數管理、數據包的傳輸等。內存
client 與server 之間的跨進程通訊則統一經過binder driver 處理轉發。源碼
運行機制:
ServerManager 至關於DNS; 是一個引用號爲0 的binder server。
clinet 先經過引用號0 ,向server Manager 去查詢須要的binder的引用號。
binder server 會封裝好數據後,向binder driver 查詢,並返回數據,最終再返回給client;
參考:
Android 源碼設計模式 P340