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 獲取到的物件,該物件既可以和我們的程序通訊,又可以和遠端程序通訊,充當了中間通訊的角色。