<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    小菜毛毛技術分享

    與大家共同成長

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks

    8.4.2  建立AIDL服務的步驟(2)

    在編寫上面代碼時應注意如下兩點:

    使用bindService方法來綁定AIDL服務。其中需要使用Intent對象指定AIDL服務的ID,也就是<action>標簽中android:name屬性的值。

    在綁定時需要一個ServiceConnection對象。創建ServiceConnection對象的過程中如果綁定成功,系統會調用onServiceConnected方法,通過該方法的service參數值可獲得AIDL服務對象。

    首先運行AIDL服務程序,然后運行客戶端程序,單擊【綁定AIDL服務】按鈕,如果綁定成功,【調用AIDL服務】按鈕會變為可選狀態,單擊這個按鈕,會輸出getValue方法的返回值,如圖8.26所示。

     
    圖8.26  調用AIDL服務的客戶端程序

    實例53:傳遞復雜數據的AIDL服務

    AIDL服務工程目錄:src\ch08\ch08_complextypeaidl

    客戶端程序工程目錄:src\ch08\ch08_complextypeaidlclient

    AIDL服務只支持有限的數據類型,因此,如果用AIDL服務傳遞一些復雜的數據就需要做更一步處理。AIDL服務支持的數據類型如下:

    Java的簡單類型(int、char、boolean等)。不需要導入(import)。

    String和CharSequence。不需要導入(import)。

    List和Map。但要注意,List和Map對象的元素類型必須是AIDL服務支持的數據類型。不需要導入(import)。

    AIDL自動生成的接口。需要導入(import)。

    實現android.os.Parcelable接口的類。需要導入(import)。

    其中后兩種數據類型需要使用import進行導入,將在本章的后面詳細介紹。

    傳遞不需要import的數據類型的值的方式相同。傳遞一個需要import的數據類型的值(例如,實現android.os.Parcelable接口的類)的步驟略顯復雜。除了要建立一個實現android.os.Parcelable接口的類外,還需要為這個類單獨建立一個aidl文件,并使用parcelable關鍵字進行定義。具體的實現步驟如下:

    (1)建立一個IMyService.aidl文件,并輸入如下代碼:

    1. package net.blogjava.mobile.complex.type.aidl;  
    2. import net.blogjava.mobile.complex.type.aidl.Product;  
    3. interface IMyService    
    4. {    
    5.     Map getMap(in String country, in Product product);  
    6.     Product getProduct();       

    在編寫上面代碼時要注意如下兩點:

    Product是一個實現android.os.Parcelable接口的類,需要使用import導入這個類。

    如果方法的類型是非簡單類型,例如,String、List或自定義的類,需要使用in、out或inout修飾。其中in表示這個值被客戶端設置;out表示這個值被服務端設置;inout表示這個值既被客戶端設置,又被服務端設置。

    (2)編寫Product類。該類是用于傳遞的數據類型,代碼如下:

    1. package net.blogjava.mobile.complex.type.aidl;  
    2.  
    3. import android.os.Parcel;  
    4. import android.os.Parcelable;  
    5.  
    6. public class Product implements Parcelable  
    7. {  
    8.     private int id;  
    9.     private String name;  
    10.     private float price;  
    11.     public static final Parcelable.Creator<Product>
       CREATOR = new Parcelable.Creator<Product>()  
    12.     {  
    13.         public Product createFromParcel(Parcel in)  
    14.         {  
    15.             return new Product(in);  
    16.         }  
    17.  
    18.         public Product[] newArray(int size)  
    19.         {  
    20.             return new Product[size];   
    21.         }  
    22.     };  
    23.     public Product()  
    24.     {  
    25.     }  
    26.     private Product(Parcel in)  
    27.     {  
    28.         readFromParcel(in);  
    29.     }  
    30.     @Override  
    31.     public int describeContents()  
    32.     {  
    33.         return 0;  
    34.     }  
    35.     public void readFromParcel(Parcel in)  
    36.     {  
    37.         id = in.readInt();  
    38.         name = in.readString();  
    39.         price = in.readFloat();  
    40.     }  
    41.     @Override  
    42.     public void writeToParcel(Parcel dest, int flags)  
    43.     {  
    44.         dest.writeInt(id);  
    45.         dest.writeString(name);  
    46.         dest.writeFloat(price);  
    47.     }  
    48.     //  此處省略了屬性的getter和setter方法  
    49.     ... ...  

    在編寫Product類時應注意如下3點:

    Product類必須實現android.os.Parcelable接口。該接口用于序列化對象。在Android中之所以使用Pacelable接口序列化,而不是java.io.Serializable接口,是因為Google在開發Android時發現Serializable序列化的效率并不高,因此,特意提供了一個Parcelable接口來序列化對象。

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

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

    (3)建立一個Product.aidl文件,并輸入如下內容:

    1. parcelable Product; 
    posted on 2010-11-19 16:58 小菜毛毛 閱讀(566) 評論(0)  編輯  收藏 所屬分類: andriod
    主站蜘蛛池模板: 亚洲精品综合久久中文字幕| 国产小视频在线免费| a级精品九九九大片免费看| 一区二区三区免费精品视频| 美女视频黄a视频全免费网站色 | 永久免费AV无码网站在线观看 | 三上悠亚在线观看免费| a一级毛片免费高清在线| 一级毛片免费毛片毛片| aa级毛片毛片免费观看久| 不卡视频免费在线观看| 好紧我太爽了视频免费国产 | 在线观看亚洲网站| 国产成人亚洲精品电影| 色网站在线免费观看| 欧亚一级毛片免费看| 国产精品免费观看视频| 色www永久免费网站| 欧洲精品99毛片免费高清观看| 最近中文字幕大全中文字幕免费| 亚洲一区在线免费观看| 成人免费AA片在线观看| 日本大片在线看黄a∨免费| 吃奶摸下高潮60分钟免费视频 | 24小时免费直播在线观看| 日本免费人成黄页在线观看视频| 亚洲成人国产精品| 亚洲人成精品久久久久| 亚洲视频国产精品| 亚洲精品无码久久久久久| 日韩毛片一区视频免费| A级毛片高清免费视频在线播放| 2021精品国产品免费观看| 好爽…又高潮了免费毛片| 亚洲七七久久精品中文国产| 亚洲AV综合色区无码一区爱AV| 亚洲人成激情在线播放| 精品在线免费视频| 嫩草影院在线播放www免费观看| 黄网站色在线视频免费观看| 国产大片91精品免费观看男同|