android開發入門知識之AIDL詳解

最近即將作的一個項目裏面須要使用到AIDL(Android Interface Definition Language:接口描述語言)技術,就在麥子學院android開發視頻教程上簡單瞄了一眼,個人理解它和java中的RMI的概念差很少,因而就本身嘗試的測試了下。廢話不說了,直接開始 
一、既然AIDL是既然是能夠在不一樣進程間進行操做,那麼咱們首先就須要準備兩個項目,咱們先來看看不一樣的兩個項目結構式什麼樣子的。如圖: 
java

 

咱們先暫且定義一個項目爲「服務器端項目」,一個爲「客戶端項目」,其中紫色線框裏面的東西是第一個須要注意的地方,就是無論你兩個項目包名有多大差別,可是aidl文件必須放置在同一個包下面,並且名字也要相同。 
二、咱們如今建立好了項目,下一步就是開發調用接口和實現方法了。其實aidl文件在這裏就充當的是一個interface類,你能夠在它裏面寫上你要公佈給客戶端的調用接口。(具體代碼我就不寫了,你們能夠看我上傳的項目)在寫aidl接口時,須要注意的是:類命必須和你的aidl文件名相同;必須指明當前包路徑;若是是經常使用類型,如:String、List、int、void之類的,就不須要導入所在包路徑了,當使用了外部類時,就須要導入這個類所在的包路徑了;書寫方法時,每一個參數必須指定in或out來代表它是輸入參數仍是輸出參數。 
三、既然aidl咱們寫完了,那麼接下來固然是要去實現這個接口,讓它來幫咱們作事情了,Aidl由於是遠程調用,因此這裏你的實現類必須是一個繼承Service的類,而後在這個實現類中再去作aidl的實現方法。上圖中TestService就是個人實現類,具體代碼也請看我上傳的項目。不過在TestService須要注意的就是,onBind方法必定要返回你實現的aidl實例對象,供遠程調用方使用 
public IBinder onBind(Intent intent) { 
return binder; 

四、服務端manifest.xml中須要進行以下配置,否則你客戶端調用會沒法得到你的aidl對象的,我以前作測試的時候,一直被這個問題困擾。 
<serviceandroid:name="TestService" android:process=":remote"> 
    <intent-filter>配置你的AIDL接口完整路徑 
    <actionandroid:name="com.lifeblood.ITestService" /> 
    </intent-filter> 
<rvice> 
五、作完了服務器的工做後,咱們再開始作客戶端的工做。客戶端其實就很簡單了,把服務器的aidl拷貝過來,建立一個ServiceConnection用來獲得遠程onBind中傳遞過來的aidl接口對象,而後在啓動的時候進行一次綁定bindService就能夠開始使用aidl中的方法了。 
android

更多android開發教程盡在:http://www.maiziedu.com/course/android/web

相關文章
相關標籤/搜索