最近即將做的一個項目裡面需要使用到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對象的,我之前做測試的時候,一直被這個問題困擾。 <service android:name="TestService" android:process=":remote"> <intent-filter>配置你的AIDL接口完整路徑 <action android:name="com.lifeblood.ITestService" /> </intent-filter> </service> 5、做完了伺服器的工作後,我們再開始做客戶端的工作。客戶端其實就很簡單了,把伺服器的aidl拷貝過來,創建一個ServiceConnection用來得到遠程onBind中傳遞過來的aidl接口對象,然後在啟動的時候進行一次綁定bindService就可以開始使用aidl中的方法了。 如果各位以後需要使用到aidl,那麼只要注意以上說的,我想就不會出現什麼大問題了,至少我就是這樣走過來的。希望上面的介紹能對各位有幫助,如果中間有錯誤的地方,也請各位指正,大家共同學習。
本文內容整理自網絡, 文中所有觀點看法不代表淘大白的立場
使用bindService方法來綁定AIDL服務.其中需要使用Intent對象指定AIDL服務的ID,也就是<action>標籤中android:name屬性的值.在綁定時需要一個ServiceConnection對象.創建ServiceConnection對象的過程中如果綁定成功,系統 ...
AIDL(AndRoid接口描述語言)是一種藉口描述語言; 編譯器可以通過aidl文件生成一段代碼,通過預先定義的接口達到兩個進程內部通信進程的目的. 如果需要在一個Activity中, 訪問另一個Service中的某個對象, 需要先將對象轉化成AIDL可識別的參數(可能是多個參數), 然後使用AI ...
跨進程訪問(AIDL服務)Android系統中的進程之間不能共享內存,因此,需要提供一些機制在不同進程之間進行數據通信.我們知道4個Android應用程式組件中的3個(Activity.Broadcast和Content Provider)都可以進行跨進程訪問,另外一個Android應用程式組件Se ...
在An在Android 中有一種服務說是服務其實倒不如說是一個接口,這個接口名為:Android Interface Definition Language ,這個接口可提供跨進程訪問服務,英文縮寫為:AIDL.此種服務的好處在於,多個應用程式之間建立共同的服務機制,通過AIDL在不同應用程式之間達 ...
在Android開發中, 每個應用程式都可以有自己的進程. 在寫UI應用的時候, 經常要用到Service. 在不同的進程中, 怎樣傳遞對象呢? 顯然, Java中不允許跨進程內存共享. 因此傳遞對象, 只能把對象拆分成作業系統能理解的簡單形式, 以達到跨界對象訪問的目的. 在J2EE中,採用RMI ...
android
2. 客戶端實現: (1)目錄結構,如下圖: (2)將伺服器端的IAIDLService.aidl,Person.aidl和Person.java文件拷貝到本工程中,如上圖所示: (3)res/layout/main.xml實現:Java代碼: <?xml ver ...
android
Android NDK: WARNING: APP_PLATFORM android-9 is larger than android:minSdkVersion問題這個問題開始看比較蛋疼,你會很詫異為什麼總是提示我大於 android:minSdkVersion實際上這是由於AndroidMani ...
一. 概述: 跨進程通信(AIDL),主要實現進程(應用)間數據共享功能. 二. 實現流程: 1. 伺服器端實現: (1)目錄結構,如下圖: (2)實現*.aidl文件: A. IAIDLService.aidl實現:Java代碼: impor ...
android
隨著移動網際網路的普及,智能設備日益成為了人們不可或缺的一部分,而其中用戶群體最大的系統--Android也變得越來越受歡迎,那麼就讓我們來看看如何從零開始自學成為Android工程師吧! 工具/原料 電腦 堅持 方法/步驟 Android系統是基於Linux內核,以Java語言為主要實現語言的.我們 ...
android
源碼:包含一著歌,所以文件比較大,5M多;作個解釋:aidl = Android 接口,定義語言,用於遠程通訊,我們只需要編寫,.aidl文件,eclipse插件就會為我們生成相應的代碼.在要遠程控制的service中創建一個該接口的對象,()實現具體方法. IPlayer.Stub stub = ...
android
android文件的讀寫主要分為兩個方面,一個是將內容寫入本應用的data文件夾中,另一個是將內容寫入到sdcard中.兩者都使用I/O流的讀寫技術. 下面具體具體介紹這兩方面的內容: 方法/步驟 一.將內容寫入本應用中: 注意android的上下文對象context在這個方法中起的的作用(可以用它 ...
android
使用AIDL設計遠程接口(Designinga Remote Interface Using AIDL) 由於每個應用程式都運行在自己的進程空間,並且可以從應用程式UI運行另一個服務進程,而且經常會在不同的進程間傳遞對象.在Android平台,一個進程通常不能訪問另一個進程的內存空間,所以要想對話, ...
android
對於Android開發者來說,Android開發在某些方面更容易產生一些微小的優秀的習慣以及在Android開發中發現有利的技巧手段,受益匪淺對零基礎學習Android開發的十個完美建議. 工具/原料 紙筆 方法/步驟 1.IDE的選擇 大多數Android開發是在Eclipse中進行的,其實Int ...
android
TextView:就是在手機界面中顯示文本. 工具/原料 android開發環境 方法/步驟 先來說說TextView有哪些重要的xml屬性xml屬性 說明android:ellipsize 文本過長怎麼處理android:pho ...
android
現在有許多做開發的轉做移動端開發,做J2EE的轉做Android開發,我也把自己的一些入門經驗與大家分享一下,希望能給你帶來幫助. 工具/原料 JDK,ADT,JAVA 方法/步驟 開發工具的準備: 第一個工具:JDK1.7, 第二個工具:Android Developer Tools簡稱ADT. ...
android
隨著智能移動設備的普及成為了一個流行趨勢,Android作為一個開放性平台,對手機廠商和軟體開發商的吸引力也在持續升高,這一點不僅僅體現在成倍增長的Android手機銷量上,Android的市場將被更大程度的被拓展開來.在這樣的大環境下,學習Android開發逐漸成為了一種潮流.那麼,學習Andro ...
android
簡單介紹一下webview的loadurl用法. 方法/步驟 實驗目的,新建項目創建兩個activity,第一個設置一個按鈕,點擊按鈕進入第二個Activity,然後再第二個裡面打開一個網站. 在新創建的activity中添加一個webview組件. 也可以手動添加代碼來實現. 給按鈕加入動作,實現 ...
android
對於初學android開發培訓的人來說,android開發生命周期一課算是最重要的內容之一了,從簡單到深度理解,如果想學好一門編程技術,就要從點滴知識的入門開始,沒見過這麼簡單明了的android開發課程!
android
Android是基於Linux內核的作業系統,是Google公司在2007年11月5日公布的手機作業系統.早期由原名為"Android"的公司開發,谷歌在2005年收購"Android.Inc"後,繼續進行對Android系統開發運營,它採用了軟體堆層的架構, ...
我做的android開發也快半年了,卻連個listview也寫不好,說來真是慚愧,我自從進入 android行業就沒怎麼接觸過界面,偶爾用到頗為頭痛,為此故我決定自己補上一補,先來說一下listview開發吧,難道是太簡單了,網上的開發大都涉及到自定義adapter,我就來彌補一下最最基礎的空白. ...