Binder的理解
android基於open binder實現的,進程間通信機制。相對於linux進程間通信,性能,安全性,穩定性較好。
- 性能: 只需要一次數據拷貝,性能上僅次於共享內存。
- 穩定性:基於C/S架構,職責明確、架構清晰,因此穩定性好。
- 安全性:爲每個APP分配UID,進程UID是鑑別進程身份的重要標誌。
Linux IPC機制
進程隔離;
進程空間劃分:用戶空間/內核空間
系統調用:切換到內核態的唯一方式。用戶態/內核態。
Binder機制
動態內核可加載機制,內存映射
運行在內核空間的,Binder驅動(使用Linux的動態內核可加載機制)
內存映射,用戶空間的一塊內存,映射到內核空間。兩者修改都可見。
由Client
、Server
、ServiceManager
、Binder驅動
。
其中Client
、Server
、ServiceManager
運行在用戶空間,Binder驅動
運行在內核空間。
其中ServiceManager
和Binder
驅動由系統提供,而Client
、Server
由應用程序來實現。
Binder的代理模式
Client
進程要獲取Server
進程中的object時,驅動並不是真的把object返回給Client
,
而是返回了一個跟object看起來一模一樣的方法objectProxy,但是這些方法並沒有
Server進程中object的能力,這些方法只需要把請求參數交給驅動即可。對於A進程來說
和直接調用object中方法是一樣的。