AIDL的實現和注意點

分類:技術 時間:2016-10-25

AIDL的目的是:可以將業務型應用的功能通過aidl的方式開放給其他應用實現,比如支付寶的支付功能,給淘寶用。

一:根據需求,生成一個aidl接口的jar包,生成jar包,為了避免需求方和公司定義的aidl不統一,而且只要維護這個jar包就行了

1,創建一個android工程,定義aidl工程

2,aidl接口定義,必須在xx.xx.xx.aidl的package下面

接口定義

3,如果返回值有自定義類型的,自定義數據類也要放在xx.xx.xx.aidl的package下面,并且要定義一個自定義類型接口的aidl,同時自定義數據類型要實現Parcelable。另外返回自定義數據類的接口,記得import該數據類。

自定義數據類的aidl

自定義數據類實現Parelable

返回自定義類的接口,記得import

4、生成jar包,將改android工程勾上 is library 變成依賴工程,然后讓其他工程依賴他,編譯被依賴工程的時候就會在該依賴工程的bin下面生成可用的jar包,然后給客戶端和服務端的aidl工程使用;

該工程為依賴工程

二:aidl客戶端和服務端的實現

1、客戶端要定義ServiceConnection

public ISystemManager mISystemManager;//aidl接口

ServiceConnection

2、然后通過bingdService連接上上去

context.bindService(explicitIntent,serviceConn, Context.BIND_AUTO_CREATE);

3,客戶端調用aidl接口,具體功能,服務端實現

調用用aidl接口

服務端定義一個setvice,onBind返回實現接口stub的類

@Override

publicIBinder onBind(Intentintent) {

mISystemManagerService=this;

returnnewISystemManagerStub();

}

繼承aidl接口的stub

到此客戶端調用接口,服務端這邊實現接口的流程就結束了。

三:AIDL監聽器的實現

有的時候,aidl接口中還有一些監聽器,比如卸載的回調等,思路是客戶端實現監聽aidl的stub,服務端傳遞參數回調回去。

監聽器aidl的定義和在其他aidl接口中的位置:

定義監聽器aidl接口和普通的aidl接口一樣

監聽器aidl接口

監聽器aidl類在其他aidl類中,做入參操作

服務端有監聽器實現:

獲取到客戶端傳來的監聽器對象,然后調用監聽aidl的接口方法,將值傳遞回去

服務端傳遞參數

客戶端監聽器實現

客戶端監聽器的實現

注意點:

下面是AIDL能支持的數據類型:入參和出參;

Java編程語言的主要類型(int, boolean等)—不需要import語句。

以下的類(不需要import語句):

String

List -列表中的所有元素必須是在此列出的類型,包括其他AIDL生成的接口和可打包類型。List可以像一般的類(例如List)那樣使用,另一邊接收的具體類一般是一個ArrayList,這些方法會使用List接口。

Map - Map中的所有元素必須是在此列出的類型,包括其他AIDL生成的接口和可打包類型。一般的maps(例如Map)不被支持,另一邊接收的具體類一般是一個HashMap,這些方法會使用Map接口。

CharSequence -該類是被TextView和其他控件對象使用的字符序列。

通常引引用方式傳遞的其他AIDL生成的接口,必須要import語句聲明

實現了Parcelable protocol以及按值傳遞的自定義類,必須要import語句聲明。


Tags: AIDL

文章來源:http://www.jianshu.com/p/b09126533682


ads
ads

相關文章
ads

相關文章

ad