Android開發基礎:[1]AIDL簡單入門

最近即將做的一個項目裡面需要使用到AIDL(Android Interface Definition Language:接口描述語言)技術,自己早前只是簡單瞄了一眼,我的理解它和java中的RMI的概念差不多,在這裡我就不相信講解什麼事AIDL 了,網上這種介紹非常多。不過概念畢竟是書本上的東西,我決定親自測試一下。廢話不說了,直接開始 1、 既然AIDL是既然是可以在不同進程間進行操作,那麼我們首先就需要準備兩個項目,我們先來看看不同的兩個項目結構式什麼樣子的。如圖:我們先暫且定義一個項目為「伺服器端項目」,一個為「客戶端項目」,其中紫色線框裡面的東西是第一個需要注意的地方,就是不管你兩個項目包名有多大差異,但是aidl文件必須放置在同一個包下面,而且名字也要相同。 2、我們現在創建好了項目,下一步就是開發調用接口和實現方法了。其實aidl文件在這裡就充當的是一個interface類,你可以在它裡面寫上你要公布給客戶端的調用接口。(具體代碼我就不寫了,大家可以看我上傳的項目)在寫aidl接口時,需要注意的是:類命必須和你的aidl文件名相同;必須指明當前包路徑;如果是常用類型,如:String、List、int、void之類的,就不需要導入所在包路徑了,當使用了外部類時,就需要導入這個類所在的包路徑了;書寫方法時,每個參數必須指定in或out來表明它是輸入參數還是輸出參數。 3、 既然aidl我們寫完了,那麼接下來當然是要去實現這個接口,讓它來幫我們做事情了, Aidl因為是遠程調用,所以這裡你的實現類必須是一個繼承Service的類,然後在這個實現類中再去做aidl的實現方法。上圖中 TestService就是我的實現類,具體代碼也請看我上傳的項目。不過在TestService需要注意的就是,onBind方法一定要返回你實現的 aidl實例對象,供遠程調用方使用 public IBinder onBind(Intent intent) { return binder; } 4、 服務端manifest.xml中需要進行如下配置,不然你客戶端調用會無法獲得你的aidl對象的,我之前做測試的時候,一直被這個問題困擾。 <service android:name="TestService" android:process=":remote">    <intent-filter>配置你的AIDL接口完整路徑    <action android:name="com.lifeblood.ITestService" />    </intent-filter> </service> 5、做完了伺服器的工作後,我們再開始做客戶端的工作。客戶端其實就很簡單了,把伺服器的aidl拷貝過來,創建一個ServiceConnection用來得到遠程onBind中傳遞過來的aidl接口對象,然後在啟動的時候進行一次綁定bindService就可以開始使用aidl中的方法了。 如果各位以後需要使用到aidl,那麼只要注意以上說的,我想就不會出現什麼大問題了,至少我就是這樣走過來的。希望上面的介紹能對各位有幫助,如果中間有錯誤的地方,也請各位指正,大家共同學習。

本文內容整理自網絡, 文中所有觀點看法不代表淘大白的立場