資源簡介
這兩天在學(xué)習(xí)aidl跨進程調(diào)用,研究了一天終于寫出了個helloword。。做下記錄吧。
根據(jù)官方提供的指南,開發(fā)aidl跨進程調(diào)用,主要分以下步驟:
1. 創(chuàng)建.aidl文件-該文件(YourInterface.aidl)定義了客戶端可用的方法和數(shù)據(jù)的接口。
2. 在makefile文件中加入.aidl文件-(Eclipse中的ADT插件提供管理功能)Android包括名為AIDL的編譯器,位于tools/文件夾。
3. 實現(xiàn)接口-AIDL編譯器從AIDL接口文件中利用Java語言創(chuàng)建接口,該接口有一個繼承的命名為Stub的內(nèi)部抽象類(并且實現(xiàn)了一些IPC調(diào)用的附加方法),要做的就是創(chuàng)建一個繼承YourInterface.Stub的類并且實現(xiàn)在.aidl文件中聲明的方法。
4. 向客戶端公開接口-如果是編寫服務(wù),應(yīng)該繼承Service并且重載Service.onBind(Intent) 以返回實現(xiàn)了接口的對象實例
上面的東西真的很官方。。下面結(jié)合我的例子做一下學(xué)習(xí)總結(jié):
先開發(fā)服務(wù)器端
1.創(chuàng)建一個aidl文件,可以看提供的源碼。創(chuàng)建完成后,eclipse插件自動在gen目錄下生成同名字的java文件。里面包含一個Stub抽象類,這個類繼承自android.os.Binder,這個類是實現(xiàn)整個遠程調(diào)用的核心。
2.然后創(chuàng)建一個類來繼承上面說到的那個Stub抽象類,實現(xiàn)里面的抽象方法。(這些抽象方法是根據(jù)aidl文件自動生成的)。
3.創(chuàng)建一個自定義Service繼承自Service,實現(xiàn)其onBind方法,注意此onBind方法必須返回第二步創(chuàng)建的那個Stub類的子類。然后在xml中聲明此service,注意此service的聲明必須包含一個action,此action也用于客戶端的調(diào)用使用。(在下面的客戶端開發(fā)中會有介紹)。
4.創(chuàng)建一個activity,此activity只要實現(xiàn)把service啟動了即可。
這樣服務(wù)器端就開發(fā)完畢,運行后啟動了一個可供遠程調(diào)用的service。關(guān)鍵還是通過onBind暴露一個Binder給客戶端。Binder哪來呢?就是通過aidl文件adt會自動生成一個抽象類Stub繼承自Binder,只需要創(chuàng)建一個類實現(xiàn)這個Stub的抽象方法即可。
然后開發(fā)客戶端:
1.客戶端也需要一個aidl文件,注意客戶端的aidl文件的包名必須和服務(wù)器端的aidl包名一致,名字也相同。創(chuàng)建完后同樣會在gen下生成一個接口。
2.創(chuàng)建一個Activity,包含變量ServiceConnection con,實現(xiàn)其onServiceConnected和onServiceDisconnected方法,onServiceConnected方法生成第一步那個接口的實現(xiàn)類的對象。con對象用于在onCreate中綁定service,這個service的action必須為服務(wù)器端聲明的那個service的配置action。綁定中用到con會執(zhí)行onServiceConnected方法生成aidl對象iPerson。然后就可以通過iPerson來調(diào)用aidl里的任意方法返回服務(wù)器的東西。
客戶端開發(fā)完畢。關(guān)鍵點是創(chuàng)建aidl文件自動生成了一個接口,在activity中必須綁定服務(wù)程序開啟的service,在綁定過程中初始化aidl對象。然后就可用aidl對象調(diào)用任意方法了。
OK,可以運行看效果了。過程真的很繁瑣。。但是好像也只能這樣了。最主要的還是服務(wù)端onBind暴露,然后客戶端bindService得到aidl對象。
代碼片段和文件信息
-----------?---------??----------?-----??----
?????文件???????2425??2012-07-04?15:20??aidl跨進程調(diào)用\aidl跨進程調(diào)用.txt
?????文件?????128808??2012-07-04?15:20??aidl跨進程調(diào)用\remote.zip
?????目錄??????????0??2012-07-04?15:21??aidl跨進程調(diào)用
-----------?---------??----------?-----??----
???????????????131233????????????????????3
評論
共有 條評論