——服務端——
服務端定義AIDL接口:例如:A.aidl,它的位置也在service所在目錄,ADT會在該目錄下生成一個A.java接口,接口裡包含了一個stub内部類,其實作了A和IBinder(普通Service被調用時都要通過它來回調以傳輸資料)兩個接口,它來作為遠端Service回調類。
A.aidl格式如下:
interface A{
String getxxx();
double getxxx();
...
}
在Service實作類的内部,需要定義一個類繼承Stub,繼承的類會同時實作接口A和接口IBinder(因為Stub接口實作了這兩個接口)。
如下:
public class B extends Stub{
@override
public String getxxx(){
return xxx;
}
@override
public double getxxx(){
return xxx;
}
}
在Service實作類的oncreate()方法中:
onCreate(...){
...
B b=new B();
...
}
在Service實作類的onBind(…)方法中:
@override
public IBinder onBind(...){
return b;
}
也就是說:以繼承Stub的A類代替了繼承自Binder類的類,以它來實作回調。
——用戶端——
用戶端也需要xxx.aidl,要将之前服務端定義的A.aidl複制到用戶端中。同時,在ServiceConnection類的onServiceConnected方法中:
其它地方一樣。