繫結器是處理序間通訊系統,可讓 Android 裝置上的兩個處理序通訊。Binder 提供在另一個程序中執行函式呼叫的方法,對呼叫端完全透明。
以繫結器來說,呼叫程序會視為「用戶端」,其端點則稱為「繫結器 Proxy」或「Proxy」。反之,被呼叫的程序是「伺服器」,其端點則稱為「繫結器節點」或「節點」。
每個節點都可以公開及實作自己的介面。此外,使用 Proxy 時,用戶端可以在節點介面上執行方法,就像叫用的是本機函式呼叫一樣。以下範例顯示方法的叫用方式:
int result = someNodeInterface.foo(a, b); // someNodeInterface is a proxy object
假設呼叫 foo()
的用戶端在程序 A 中執行,而實作 foo()
的伺服器在程序 B 中執行。圖 1 顯示如何執行這項呼叫:
圖 1. 執行 Binder 呼叫。
如要執行另一個程序中的方法 (如圖 1 所示),請按照下列步驟操作:
- 程序 A 中的用戶端程式碼會叫用程序 A 中的 Proxy 程式碼。程序 A 中的 Proxy 程式碼會建立交易,其中包含下列項目:
- 節點的 ID
- 節點上
foo()
方法的 ID - 緩衝區,內含引數
a
和b
的副本
- 交易會提交至繫結器核心驅動程式。
- 繫結器核心驅動程式會判斷程序 B 是節點的主機。
- 核心會將整個交易複製到程序 B 的位址空間。
- 核心會在程序 B 中找到處理交易的執行緒,並將交易傳遞給該執行緒。
- 執行緒會解壓縮交易、找出節點,然後將交易傳送至節點物件。
- 節點物件會從交易取得函式 ID,從交易緩衝區解壓縮
a
和b
,並將a
和b
儲存在本機變數中。 - 節點物件會在程序 B 中呼叫伺服器程式碼的
foo(a, b)
。 - 呼叫結果會以回覆交易的形式傳回,並傳遞至核心驅動程式,然後傳回程序 A 中的呼叫 Proxy。
- Proxy 會將結果傳回程序 A 中的呼叫端。
Binder 用途
在各種情況下,您都可以使用 Binder,在不同程序中的軟體之間進行通訊。例如:
相機應用程式會使用繫結器,與另一個程序中的相機伺服器通訊。接著,相機伺服器會使用繫結器與另一個程序中的相機 HAL 通訊。
應用程式會使用繫結器與其他程序中的系統伺服器通訊。系統伺服器會使用繫結與其他程序中的 HAL 通訊。
某個程序中的應用程式會使用繫結器,與另一個程序中的應用程式通訊。
負責安裝、更新及移除應用程式的系統精靈 (
installd
) 會使用繫結器與 Android 執行階段精靈 (「artd」) 通訊,以編譯應用程式。