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

Tags: 專案, 基礎,

最近即將做的一個專案裡面需要使用到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物件的,我之前做測試的時候,一直被這個問題困擾。 配置你的AIDL介面完整路徑 5、做完了伺服器的工作後,我們再開始做客戶端的工作。客戶端其實就很簡單了,把伺服器的aidl拷貝過來,建立一個ServiceConnection用來得到遠端onBind中傳遞過來的aidl介面物件,然後在啟動的時候進行一次繫結bindService就可以開始使用aidl中的方法了。 如果各位以後需要使用到aidl,那麼只要注意以上說的,我想就不會出現什麼大問題了,至少我就是這樣走過來的。希望上面的介紹能對各位有幫助,如果中間有錯誤的地方,也請各位指正,大家共同學習。

Android開發基礎 (共11篇) 下一篇:什麼是AIDL服務

專案, 基礎,
相關問題答案