Android接口定義語言—AIDL

1.創建.aidl文件

AIDL使用簡單的語法來聲明帶有多個方法的接口,這個些方法能夠帶有參數和返回值。參數和返回值可以是任意類型的,甚至是其他AIDL生成的接口。

必須使用Java編程語言來構建.aidl文件。每個.aidl文件必須定義一個單一的接口,並要求隻有接口聲明和方法簽名。

默認情況下,AIDL支持下列數據類型:

1.Java語言中所有的原始數據類型(如int,long,char,boolean等);

2.String

3.CharSequence

4.List

   在List中的所有元素都必須是這個列表中所支持的數據類型,或其他AIDL所生成的接口    或是由你聲明的類型。List可以選擇使用范型類(如List<String>)。雖然是使用List接口來生成方法,但實際上接受類始終是ArrayList類。

5.Map

   在Map中的所有元素都必須是這個列表中所支持的數據類型,或者是其他的AIDL所生成的接口,或者是由你聲明的類型。不支持范型Map(如Map<String, Integer>)。雖然使用Map接口來生成方法,但實際上接受類始終是HasMap。

上述列表中沒有列出的其他類型都必須要包含一個import語句,即使是在與接口相同的包中定義的。

在定義Service接口是,要註意:

1.方法能夠帶有0或多個參數,並且能夠返回一個值或void;

2.所有非基本類型的參數都需要方向性的標記,指明數據的走向,既可以是in、out,也可以是inout(詳細請看下面的示例)。

默認是in,不能是其他的方式。

警告:你應該把數據走向限制到真正需要的方向,因為編組參數是非常浪費資源的。

3.在.aidl文件中包含的所有代碼註釋都會被包含在生成的IBinder接口中(除瞭在import和package語句之前的註釋)。

4.僅支持方法,不能暴露AIDL中的靜態字段。

以下是一個.aidl文件的示例:

// IRemoteService.aidl

package com.example.android;

 

// Declare any non-default types here with import statements

 

/** Example service interface */

interface IRemoteService {

    /** Request the process ID of this service, to do evil things with it. */

    int getPid();

 

    /** Demonstrates some basic types that you can use as parameters

     * and return values in AIDL.

     */

    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,

            double aDouble, String aString);

}

簡單的把.aidl文件保存到工程的src/目錄中,在編譯應用程序時,SDK工具會在工程的gen/目錄中生成IBinder接口文件。生成的文件名與.aidl文件名相匹配,隻是使用.java擴展名(例如,IRemoteService.aidl,生成結果是IRemoteService.java)。

如果使用Eclipse,增量編譯幾乎會立即生成綁定器類。如果不使用Eclipse,那麼Ant工具會在你下次編譯應用程序時生成綁定器類—你應該在完成編寫.aidl文件後立即用ant debug(或ant release)來編譯工程,以便你的代碼能夠鏈接到生成的類。

 

作者:FireOfStar

發佈留言