AIDL通訊原理,androidaidl原理
AIDL (Android Interface Definition Language),通過定義通訊介面來實現處理序間通訊。這是Google提供的一種在安卓應用處理序間通訊的工具。所以要瞭解AIDL的通訊原理,我們需要圍繞以下兩個問題來展開。
1、為什麼需要AIDL?
我們都知道AIDL的目的是進行處理序間通訊。所以在瞭解AIDL原理之前先要瞭解一下什麼叫處理序間通訊。處理序間通訊涉及到兩個名詞,一個是進程間,一個是通訊。進程間就是兩個或多個進程之間,所以這裡先要明確一個概念,處理序間通訊涉及到多個實體。其次是通訊,什麼是通訊呢?打電話,發郵件,發QQ訊息都是通訊,他們之間的共同點就是資料交換。所以簡單來說,處理序間通訊就是多個多個實體間的資料交換,而且這些資料都是運行時資料,因為通訊實體是運行時產生的。那麼一般情況下,我們的應用程式是怎樣進行資料交換呢?最簡單的辦法就是共用記憶體,即建立記憶體共用區,然後進程B往記憶體共用區裡寫,進程A從記憶體共用區裡讀,從而完成通訊。但是在安卓裡是行不通的,因為單獨的進程是運行在自己的虛擬機器裡面,有著自己的記憶體映射,所以記憶體共用沒法實現,只能藉助AIDL。
2、AIDL是怎麼起作用的?
在這之前,我們先討論AIDL的實現步驟:
1)、定義AIDL檔案;
2)、實現AIDL檔案裡面定義的介面;
3)、暴露介面;
4)、調用;
這四個過程可以類比於c/s模型,如果一個用戶端需要訪問伺服器中的某一個網頁,它需要經過幾個步驟呢?同樣也是需要四個:
1)、定義通訊規則,已經有了現有的規則——tcp/ip協議族;
2)、在伺服器中編寫網頁檔案;
3)、暴露資源檔的訪問地址;
4)、用戶端發起請求,擷取資源,完成通訊;
從上面這個對比可以看出,這裡面的關鍵就是定義協議這一步,即定義AIDL檔案的過程,之後有一個重要的過程,即編譯AIDL檔案,這裡編譯器為我們做了一個最重要的一步,產生了一個Stub類,這個類是個抽象類別,繼承自Binder類,並實現了我們在AIDL檔案中定義的介面,所以我們最終對介面對象的操作最終都轉換成了Stub對象的操作,具體的通訊過程有Stub對象為我們完成了,也就是拆分對象資料,和產生對象資料這些繁瑣的事情。所以AIDL的通訊原理其實只是定義了通訊規則,具體的實現還是靠binder.所以最終的分析結果就是,AIDL將我們需要傳遞的資料拆分後,通過Binder傳遞。在訪問端AIDL把接收到的結果組裝成我們期望的對象,把底層的操作屏蔽了。