AIDL通訊原理

AIDL (Android Interface Definition Language),經過定義通訊接口來實現進程間通訊。這是Google提供的一種在安卓應用進程間通訊的工具。因此要了解AIDL的通訊原理,咱們須要圍繞如下兩個問題來展開。服務器

一、爲何須要AIDL?tcp

咱們都知道AIDL的目的是進行進程間通訊。因此在瞭解AIDL原理以前先要了解一下什麼叫進程間通訊。進程間通訊涉及到兩個名詞,一個是進程間,一個是通訊。進程間就是兩個或多個進程之間,因此這裏先要明確一個概念,進程間通訊涉及到多個實體。其次是通訊,什麼是通訊呢?打電話,發郵件,發QQ消息都是通訊,他們之間的共同點就是數據交換。因此簡單來講,進程間通訊就是多個多個實體間的數據交換,並且這些數據都是運行時數據,由於通訊實體是運行時產生的。那麼通常狀況下,咱們的應用程序是怎樣進行數據交換呢?最簡單的辦法就是共享內存,即創建內存共享區,而後進程B往內存共享區裏寫,進程A從內存共享區裏讀,從而完成通訊。可是在安卓裏是行不通的,由於單獨的進程是運行在本身的虛擬機裏面,有着本身的內存映射,因此內存共享無法實現,只能藉助AIDL。

二、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把接收到的結果組裝成咱們指望的對象,把底層的操做屏蔽了。對象

相關文章
相關標籤/搜索