Android高手進階教程(二十五)之---Android 中的AIDL!!!

android_tutor發表於2011-05-17

大家好,好久不見,今天要給大家分享的是android aidl的使用。在Android中, 每個應用程式都可以有自己的程式. 在寫UI應用的時候, 經常要用到Service. 在不同的程式中, 怎樣傳遞物件呢? 顯然, Java中不允許跨程式記憶體共享. 因此傳遞物件, 只能把物件拆分成作業系統能理解的簡單形式, 以達到跨界物件訪問的目的. 在J2EE中,採用RMI的方式, 可以通過序列化傳遞物件. 在Android中, 則採用AIDL的方式. 理論上AIDL可以傳遞Bundle,實際上做起來卻比較麻煩.  


AIDL(AndRoid介面描述語言)是一種藉口描述語言; 編譯器可以通過aidl檔案生成一段程式碼,通過預先定義的介面達到兩個程式內部通訊程式的目的. 如果需要在一個Activity中, 訪問另一個Service中的某個物件, 需要先將物件轉化成AIDL可識別的引數(可能是多個引數), 然後使用AIDL來傳遞這些引數, 在訊息的接收端, 使用這些引數組裝成自己需要的物件.  

AIDL的IPC的機制和COM或CORBA類似, 是基於介面的,但它是輕量級的。它使用代理類在客戶端和實現層間傳遞值. 如果要使用AIDL, 需要完成2件事情: 1. 引入AIDL的相關類.; 2. 呼叫aidl產生的class.  

 

今天的兩個例項用到兩個Android工程,一個是AIDL的服務端另一個是客戶端。

 

服務端的實現步驟:

首先看一下服務端,工程目錄如下:

首先建立IaidlServerService.aidl檔案,程式碼如下(一個簡單方法,另一個返回物件方法),當我們點選儲存時會在gen目錄下生成對應的java檔案,如上圖紅色部分:

 

 

第二步:因為這個介面裡有傳遞物件,所以物件要特殊處理一下,這裡繼承了Parcelable,Book.java程式碼如下:

如果大家不明的地方,請參見,下面連線的文章:

Android高手進階教程(十七)之---Android中Intent傳遞物件的兩種方法(Serializable,Parcelable)!

 

第三步:寫一個與Book類對應的aidl,命名為Book.aidl,程式碼非常簡單,程式碼如下:

 

第四步:新建一個名為AidlServerService的Service.程式碼如下:

 

第五步:在AndroidManifest.xml註冊Service,程式碼如下:

 

第六步:執行服務端工程,到裝置上,好讓客戶端呼叫,服務端的Activity什麼都沒做.效果如下:

客戶端的具體實現步驟:


第一步:新建客戶端工程,目錄結構如下:

第二步:引入Aidl檔案以及用到的類,如上面的com.chapter8.aidl包。直接從服務端裡程式碼copy過來就OK.

第三步:修改main.xml佈局檔案,增加一個按鈕,程式碼如下:

 

第四步:修改AidlClientActivity.java程式碼如下:

 

第五步:執行客戶端工程,效果如下:

 

Ok,上面就完整的作了一個Aidl開發的流程,有什麼不對的地方希望大家多多指教,今天就講到這裡。謝謝!

相關文章