Android高手進階教程(二十五)之---Android 中的AIDL!!!
大家好,好久不見,今天要給大家分享的是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開發的流程,有什麼不對的地方希望大家多多指教,今天就講到這裡。謝謝!
相關文章
- Android高手進階教程(二十三)之---Android中的日曆讀寫操作!!!Android
- Android高手進階教程(二十四)之---Android WebView的快取!!!AndroidWebView快取
- Android高手進階教程(二十)之---Android與JavaScript方法相互呼叫!AndroidJavaScript
- Android高手進階教程(二十一)之---Android中建立與幾種解析xml的方法!AndroidXML
- Android高手進階教程(二十二)之---Android中幾種影象特效處理的集錦!!Android特效
- Android高手進階教程(十九)之---Android開發中,使用執行緒應該注意的問題!Android執行緒
- Android高手進階之兩幅圖搞定DilogFragmentAndroidFragment
- Android IPC 之AIDLAndroidAI
- Android進階(七)Android中的ClassLoaderAndroid
- Android高手進階教程(十八)之---列出Android裝置中所有啟動的服務,及判斷某個服務是否開啟!Android
- Fragment中的那些坑——Android進階FragmentAndroid
- 【Android進階】RecyclerView之ItemDecoration(一)AndroidView
- Android自我進階——JAVA之JVMAndroidJavaJVM
- Android程式間通訊之AIDLAndroidAI
- Android AIDL原理AndroidAI
- 【Android進階】RecyclerView之快取(二)AndroidView快取
- Android 程式通訊機制之 AIDLAndroidAI
- Android高階進階之路【一】Android中View繪製流程淺析AndroidView
- 攻防世界web高手進階之blgdelWeb
- 【Android進階】RecyclerView之繪製流程(三)AndroidView
- Android進階2之WebView(瀏覽器)AndroidWebView瀏覽器
- Android跨程式通訊之非AIDL(二)AndroidAI
- Android ListView 進階——從列表中獲取值AndroidView
- [Android進階]Android訊息機制Android
- Android AIDL使用詳解AndroidAI
- Android探索之AIDL實現程式間通訊AndroidAI
- Android進階:十四、熟悉Android打包編譯的流程Android編譯
- 高階 Android 工程師的進階之路Android工程師
- Android動畫效果之Property Animation進階(屬性動畫)Android動畫
- Android UI進階之旅7 Material Design之PaletteAndroidUIMaterial Design
- Android IPC程式間通訊之AIDL和Messenger的使用AndroidC程式AIMessenger
- Android UI進階之旅2 Material Design之RecyclerView的使用AndroidUIMaterial DesignView
- Android aidl Binder框架淺析AndroidAI框架
- Android面試題——進階篇Android面試題
- Android 動畫進階 LollipopAndroid動畫
- 換個角度理解Android的AIDL原理AndroidAI
- Android:ListView的擴充與進階AndroidView
- Android的IPC機制(一)——AIDL的使用AndroidAI