最近即將做的一個專案裡面需要使用到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物件的,我之前做測試的時候,一直被這個問題困擾。
Android開發基礎 (共11篇) 下一篇:什麼是AIDL服務