今天繼續(xù)講AIDL,講android中如何創(chuàng)建AIDL,包括AIDL的語法,數(shù)據(jù)類型,以及如何生成對應(yīng)的Binder類。
下面是android developer官方的講解:
1.創(chuàng)建 .aidl 文件AIDL 使用簡單語法,使您能通過可帶參數(shù)和返回值的一個或多個方法來聲明接口。 參數(shù)和返回值可以是任意類型,甚至可以是其他 AIDL 生成的接口。您必須使用 java 編程語言構(gòu)建 .aidl 文件。每個 .aidl 文件都必須定義單個接口,并且只需包含接口聲明和方法簽名。默認(rèn)情況下,AIDL 支持下列數(shù)據(jù)類型:
Java 編程語言中的所有原語類型(如 int、long、char、boolean 等等)StringCharSequenceListList 中的所有元素都必須是以上列表中支持的數(shù)據(jù)類型、其他 AIDL 生成的接口或您聲明的可打包類型。 可選擇將 List 用作“通用”類(例如,List<String>)。另一端實際接收的具體類始終是 ArrayList,但生成的方法使用的是 List 接口。MapMap 中的所有元素都必須是以上列表中支持的數(shù)據(jù)類型、其他 AIDL 生成的接口或您聲明的可打包類型。 不支持通用 Map(如 Map<String,Integer> 形式的 Map)。 另一端實際接收的具體類始終是 HashMap,但生成的方法使用的是 Map 接口。
您必須為以上未列出的每個附加類型加入一個 import 語句,即使這些類型是在與您的接口相同的軟件包中定義。
定義服務(wù)接口時,請注意:方法可帶零個或多個參數(shù),返回值或空值。所有非原語參數(shù)都需要指示數(shù)據(jù)走向的方向標(biāo)記。可以是 in、out 或 inout(見以下示例)。原語默認(rèn)為 in,不能是其他方向。注意:您應(yīng)該將方向限定為真正需要的方向,因為編組參數(shù)的開銷極大。.aidl 文件中包括的所有代碼注釋都包含在生成的 IBinder 接口中(import 和 package 語句之前的注釋除外)只支持方法;您不能公開 AIDL 中的靜態(tài)字段。以下是一個 .aidl 文件示例:// IRemoteService.aidlpackage 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/ 目錄內(nèi),當(dāng)您開發(fā)應(yīng)用時,SDK 工具會在項目的 gen/ 目錄中生成 IBinder 接口文件。生成的文件名與 .aidl 文件名一致,只是使用了 .java 擴展名(例如,IRemoteService.aidl 生成的文件名是 IRemoteService.java)。如果您使用 Android Studio,增量編譯幾乎會立即生成 Binder 類。 如果您不使用 Android Studio,則 Gradle 工具會在您下一次開發(fā)應(yīng)用時生成 Binder 類 — 您應(yīng)該在編寫完 .aidl 文件后立即用 gradle assembleDebug (或 gradle assembleRelease)編譯項目,以便您的代碼能夠鏈接到生成的類。
|
新聞熱點
疑難解答
圖片精選