<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 小菜毛毛 閱讀(571) 評論(0)  編輯  收藏 所屬分類: andriod
    主站蜘蛛池模板: 在线观看免费大黄网站| 精品国产免费一区二区| 亚洲午夜精品在线| 成人免费午夜视频| 国产vA免费精品高清在线观看| 亚洲色图综合在线| 蜜桃成人无码区免费视频网站| 国产精品高清视亚洲精品| 四虎www免费人成| 国产一区二区三区免费观看在线| 亚洲AV成人无码久久精品老人| 无码国产精品一区二区免费式影视 | 国产亚洲av片在线观看16女人| 一区二区三区无码视频免费福利| 亚洲经典在线观看| 免费一级一片一毛片| 免费视频成人片在线观看| 亚洲情A成黄在线观看动漫软件| 亚洲av无码专区在线观看素人| 国产精品亚洲а∨无码播放不卡| 国产免费观看黄AV片| 97精品免费视频| 久久国产乱子伦精品免费午夜| 亚洲小视频在线播放| 久久精品国产亚洲麻豆| 国产美女做a免费视频软件| 精品国产sm捆绑最大网免费站| 国产免费AV片在线观看播放| 亚洲精品无码久久久久YW| 好看的电影网站亚洲一区| 免费国产美女爽到喷出水来视频| 香港a毛片免费观看 | 亚洲天堂一区在线| 亚洲AV无码成人专区片在线观看 | 成全视频免费观看在线看| 看免费毛片天天看| 亚洲欧洲精品成人久久曰| 亚洲最大中文字幕| 中文字幕亚洲第一在线| 久久亚洲免费视频| 亚洲AV无码1区2区久久|