1. 程式人生 > >Binder機制(非常好理解)

Binder機制(非常好理解)

Binder是一種程序間通訊機,用來實現不同程序之間的通訊。

Binder機制主要由四大塊組成,分別是客戶空間的client、server,serverManager,還有核心的Binder驅動。

下面我先看下圖,利於理解Binder內部工作機制:



伺服器端。一個Binder伺服器端就是一個Binder類的物件。當建立一個Binder物件後,內部就會開啟一個執行緒,這個執行緒用於接收binder驅

動傳送的資訊,收到訊息後,會執行相關的服務程式碼。、

Binder驅動。當服務端成功建立一個Binder物件後,Binder驅動也會相應建立一個mRemote物件,該物件的型別也是Binder類。客戶就可以

藉助這個mRemote物件來訪問遠端服務。

客戶端。客戶端要想訪問Binder的遠端服務,就必須獲取遠端服務的Binder物件在binder驅動層對應的mRemote引用。當獲取到mRemote對

象的引用後,就可以呼叫相應Binder物件的服務了。

在這裡,我們可以看到,客戶端是通過Binder驅動來呼叫服務端的相關服務。首先,在服務端建立一個Binder物件,然後相應在Binder驅動中建立一個Binder物件,接著客戶端通過獲取

Binder驅動中Binder物件的引用來呼叫服務端的服務。在Binder機制中正是藉著Binder驅動將不同程序間的元件bind(粘連)在一起,實現通訊。

為什麼android官方推薦使用Binder機制?

從三個方面:可靠性、傳輸性、安全性

可靠性:

基於Client-Server的通訊方,系統不復雜,在資源有限的手機上,就顯得非常可靠。

傳輸性:強

Socket:傳輸效率低,開銷

訊息佇列和管道採用儲存-轉發方式:即資料先從傳送方快取區拷貝到核心開闢的一塊快取區中,然後從核心快取區拷貝到接收方快取區,其過程至少有兩次拷

共享記憶體:無需拷貝,但控制復

綜上,Binder機制是非常有效的

安全性:

核心來新增可靠的UID,保證安全。


Bindler機制一個非常好的應用場景:

AIDL:

什麼是AIDL?怎麼用?

*AIDL:Android Interface definition Language 安卓介面定義語言

(1)作用:釋出和呼叫遠端服務,實現跨程序通訊

(2)將服務的aidl放到對應的src資料夾中,工程的gen會產生對應的介面類

(3)通過bindservice方法繫結遠端服務

(4)通過IBinder 獲取到的物件,該物件既可以和我們的程序通訊,又可以和遠端程序通訊,充當了中間通訊的角色。