AIDL 服務只支持有限的數據類型(轉)


AIDL 服務只支持有限的數據類型,如果用AIDL服務傳遞一些復雜的數據就需要做更一步處理,  AIDL 服務支持的數據類型如下:
1. Java 的原生類型
2. String 和CharSequence
3. List 和 Map ,List和Map 對象的元素必須是AIDL支持的數據類型;  以上三種類型都不需要導入(import)
4. AIDL 自動生成的接口  需要導入(import)
5. 實現android.os.Parcelable 接口的類.  需要導入(import)。 

要傳遞一個需要import 的數據類型的值(如: 實現Parcelable接口的類),除了要建立一個實現Parcelable 接口的類外, 還需要為這個類單獨建立一個aidl 文件, 並使用parcelable 關鍵字進行定義.

一. 服務器端

具體步驟如下:

1.  建立一個IMyService.aidl 文件,代碼如下:

package net .blogjava.mobile.complex.type.aidl;

import  net.blogjava.mobile.complex.type.aidl.Produce;

interface  IMyService  {

     Map  getMap(in String  country,  in  Product  product);

     Product  getProduct();

}

注意:   如果方法參數的類型不是原生類型,如String,List或自定義實體類,需要使用in、 out或 inout 修飾,in表示這個值被客戶端設置; out  表示這個值被服務端設置,inout 表示這個值既被客戶端設置,又被服務端設置.

2. 編寫 Product  類,該類是用於傳遞的數據類型,它實現了Parcelable接口,用於序列化對象,之所以不用java.io.Serializable 接口,是因為Serializable 接口序列化的效率沒有Parcelable接口高

(1)  在Product 類中必須有一個靜態常量,常量名必須為CREATOR,而且CREATOR 常量的數據類型必須是Parcelable.Creator

(2) 在writeToParcel 方法中需要將要序列化的值寫入 Parcel 對象

3.  建立一個Product.aidl 文件,代碼: parcelable Product;

4.  編寫一個MyService類

5.  在AndroidManifest.xml文件中配置MyService 類,代碼:

<service android:name=".MyService">

     <intent-filter><action  android:name="net.blogjava.mobile.complex.type.aidl.IMyService" /></intent-filter>

</service>

二.客戶端

首先將IMyService.java和Product.java文件復制到客戶端工程(ch08_complextypeaidlclient),然后綁定AIDL服務,並獲得AIDL服務對象,最后調用AIDL 服務的方法

 

http://blog.csdn.net/aduovip/article/details/6703516 原文


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM