AIDL與Binder的區別

2021-09-30 19:09:53 字數 920 閱讀 9723

binder是乙個遠端物件的基礎類,核心部分是遠端呼叫機制,這部分是由ibinder定義的。

它是對ibinder類的實現,其中ibinder類提供了這樣乙個類的標準的本地化實現方式。

大多數開發者不會去直接實現binder類,而是用aidl工具來描述他們自己想要的介面,借助它來生成乙個合適的binder之類。

aidl(android inte***ce define language),是android的一種介面定義語言,類似於idl。

借助它,你可以定義介面,使得客戶端和服務端之間實現程序間通訊。對android來說, 乙個程序無法通過正常的方法來訪問另乙個程序的記憶體空間。可以說,他們需要把物件分解成作業系統可以理解的原子型別,然後使物件突破限制在不同程序之間進行傳輸。具體實現這種機制的**寫起來非常枯燥,所以android為你提供了aidl語言來進行處理。

注意:a.只有當你需要來自不同應用的客戶端通過ipc通訊來訪問你的服務時,並且想在服務裡處理多執行緒的業務,這時就需要使用aidl。

b.如果你不需要同時對幾個應用程序ipc操作,你最好通過實現binder介面來建立你的介面。

c.如果你仍需要執行ipc操作,但不需要處理多執行緒,使用messenger來實現介面即可。

d.無論如何,在實現aidl之前確保你完全理解bound service相關知識。

總結下,它的們共同點和差異的地方:

1.他們都與ipc(遠端)呼叫有關。

2.本質不同,binder是乙個物件,繼承了ibinder物件,你可以借助它來自定義rpc協議。aidl是android提供的介面定義語言,借助這個工具,你可以很輕鬆地實現ipc通訊機制,根據需要靈活定義介面,

3.作用範圍不同。如果是在乙個應用裡實現遠端呼叫,使用binder即可,沒必要使用aidl。如果涉及到在多個應用程式之間使用ipc通訊,並且在服務又有多執行緒業務處理,這時可以使用aidl。

AIDL中Binder的個人理解

遠端service與客戶端通訊時,繫結服務後,服務端返回的binder物件,被客戶端接收後,客戶端呼叫該binder的物件的方法其實就是呼叫的服務端的方法。此時,若客戶端呼叫服務端的方法時傳入了客戶端實現的介面物件,服務端呼叫該介面物件的方法時,其實就是服務端呼叫的客戶端的方法 兩種情況的 被呼叫方...

Android 中的AIDL 和 binder機制

2.1 初識bindler android程序間的通訊基於binder機制,binder並非linux系統標準的通訊機制,android系統選定binder這種機制實現程序間通訊基於以下幾個考慮 1,效率高。相對於低效的socket,兩次複製的管道,使用了記憶體對映的binder效率高,只需一次複製...

service和aidl的區別

service 是在當前程序中新開執行緒,aidl 是系統新開程序,屬於另乙個程序。aidl 就是處理客戶端和服務端的 ipc 通訊實現的方式,通過 aidl 機制,客戶端通過呼叫服務端提供的介面。便於跨程序呼叫其他應用程式。如果你的應用程式不涉及其他應用時,沒有必要使用 aidl 機制。servi...