android binder機制詳解

2021-07-03 15:51:34 字數 1029 閱讀 6636

1. 直觀來說,binder是android中的乙個類,它繼承了ibinder介面

2. 從ipc角度來說,binder是android中的一種跨程序通訊方式,binder還可以理解為一種虛擬的物理裝置,它的裝置驅動是/dev/binder,該通訊方式在linux中沒有

3. 從android framework角度來說,binder是servicemanager連線各種manager(activitymanager、windowmanager,etc)和相應managerservice的橋梁

4. 從android應用層來說,binder是客戶端和服務端進行通訊的媒介,當你bindservice的時候,服務端會返回乙個包含了服務端業務呼叫的binder物件,通過這個binder物件,客戶端就可以獲取服務端提供的服務或者資料,這裡的服務包括普通服務和基於aidl的服務

android中有大量的cs(client-server)應用方式,這就要求android內部提供ipc方法,而linux所支援的程序通訊方式有兩個問題:效能和安全性。

目前linux支援的ipc包括傳統的管道,system v ipc(訊息佇列/共享記憶體/訊號量),以及socket,但只有socket支援client-server的通訊方式,由於socket是一套通用的網路通訊方式,其傳輸效率低下切有很大的開銷,比如socket的連線建立過程和中斷連線過程都是有一定開銷的。訊息佇列和管道採用儲存-**方式,即資料先從傳送方快取區拷貝到核心開闢的快取區中,然後再從核心快取區拷貝到接收方快取區,至少有兩次拷貝過程。共享記憶體雖然無需拷貝,但控制複雜,難以使用。

基於以上原因,android需要建立一套新的ipc機制來滿足系統對通訊方式,傳輸效能和安全性的要求,這就是binder。binder基於 client-server通訊模式,傳輸過程只需一次拷貝,為傳送發新增uid/pid身份,既支援實名binder也支援匿名binder,安全性高。下圖為binder通訊過程示例:

參考:1. 

2. 

android binder機制簡單使用

需求 最近公司需要在native層寫乙個c 服務,用來與上層通訊,由於自己並不是很精通c 所以決定從簡單的入手,先嘗試寫乙個binder服務。具體實現 實現乙個binder通訊例項,需要經過以下步驟 1 獲得servicemanager的物件引用 2 向servicemanager註冊新的servi...

Android binder 機制簡單分析

android 系統使用驅動的方式實現binder,用來跨程序通訊。1.android binder驅動中分配了一塊記憶體,將其對映到核心空間和使用者空間,減少資料拷貝次數。2.設計了binder通訊協議。3.在servicemanager中註冊。4.並且簡化了binder通訊 開發流程,開發者使用...

Android Binder機制原始碼筆記 2

乙個client要獲得想要通訊的service的handle,必須先借助於servicemanager來獲得想要的service的handle,所以第一步是和servicemanager這個service通訊,而servicemanader其handle固定為0,因此在iservicemanager...