Android AIDL proxy/stub 分析

AIDL的作用
    由於每個應用程序都運行在自己的進程空間,並且可以從應用程序UI運行另一個服務進程,而且經常會在不同的進程間傳遞對象。在Android平臺,一個進程通常不能訪問另一個進程的內存空間,所以要想對話,需要將對象分解成操作系統可以理解的基本單元,並且有序的通過進程邊界。
    通過代碼來實現這個數據傳輸過程是冗長乏味的,Android提供了AIDL工具來處理這項工作。
 
    AIDL (Android Interface Definition Language) 是一種IDL 語言,用於生成可以在Android設備上兩個進程之間進行進程間通信(interprocess communication, IPC)的代碼。如果在一個進程中(例如Activity)要調用另一個進程中(例如Service)對象的操作,就可以使用AIDL生成可序列化的參數。
    AIDL IPC機制是面向接口的,像COM或Corba一樣,但是更加輕量級。它是使用代理類在客戶端和實現端傳遞數據。
 

先介紹一下COM的一個概念---------Proxy/Stub結構(代理/存根結構)


打個比方,你到自動取款機上去取款;你就是客戶,取款機就是你的代理;你不會在乎錢具體放在那裏,你只想看到足夠或更多的錢從出口出來(這就是com的透明性)。你同銀行之間的操作完全是取款機代理實現。你的取款請求通過取款機,傳到另一頭,銀行的服務器,他也沒有必要知道你在哪兒取錢,他所關心的是你的身份,和你取款多少。當他確認你的權限,就進行相應的操作,返回操作結果給取款機,取款機根據服務器返回結果,從保險櫃裏取出相應數量的錢給你。你取出卡後,操作完成。取款機不是直接同服務器連接的,他們之間還有一個“存根”,取款機與存根通信,服務器與存根通信。從某種意義上說存根就是服務器的代理。(參考COM代理與存根)

AIDLFramework層的架構,如下圖:


換而言之,Android就是在傳統的C/S架構中加入了一層,實現IPC。圖中表明,AIDL類似COM的Proxy/Stub架構。不過是現在android自己的序列化類Pacel。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章