天天看點

跨程序調用Service(AIDL Service)流程1(普通資料)

——服務端——

服務端定義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方法中:

其它地方一樣。