Binder 用途

自 2025 年 3 月 27 日起,我們建議您使用 android-latest-release 而非 aosp-main 建構及貢獻 AOSP。詳情請參閱「Android 開放原始碼計畫變更」。
本頁面由 Cloud Translation API 翻譯而成。
AOSP
文件
核心主題
Binder 總覽
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
繫結器是處理序間通訊系統,可讓 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」) 通訊,以編譯應用程式。
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2025-07-27 (世界標準時間)。
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2025-07-27 (世界標準時間)。"],[],[]]