AIDL : Android Interface Define Language(接口定義語言)java
Service中跨進程間通訊利器。。。。ide
通常都會有Client端和Server端(Server端提供服務)ui
實現步驟this
一、在Server模塊 main文件夾下新建一個aidl文件夾,建立AIDL文件接口,並在Client中相同位置創建相同的包,相同的AIDL文件spa
二、編譯以後會在build-generate-source下生成一個aidl文件夾code
三、編寫Serviceblog
public class IRemoteService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return binder; } private IBinder binder=new IMyAidlInterface.Stub(){ @Override public int plus(int a, int b) throws RemoteException { return a+b; } }; }
四、在AndroidManifest文件中註冊該Service,並設置Exported屬性爲true,不然沒法被調用接口
五、Client中調用 進程
Intent i=new Intent(); i.setComponent(new ComponentName("com.alger.lu_yy.myaidl","com.alger.lu_yy.myaidl.IRemoteService"));//包名及類名 bindService(i, new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { iMyAidlInterface=IMyAidlInterface.Stub.asInterface(service); //將IBinder轉成Aidl接口 try { int count= iMyAidlInterface.plus(10,2); } catch (RemoteException e) { e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { iMyAidlInterface=null; } },BIND_AUTO_CREATE);
注意:發如今Aidl文件中是沒法引入相關的類的,能傳遞的類型有:基本數據類型(short除外),List及Map 這些都是無需Import的,當咱們須要傳遞一些自定義的數據類型時?該如何使用呢?it
一、在java文件夾下創建與aidl文件下相同的包,建立相關的類,並實現Parceable接口
public class Person implements Parcelable { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } protected Person(Parcel in) { this.age=in.readInt(); this.name=in.readString(); } public static final Creator<Person> CREATOR = new Creator<Person>() { @Override public Person createFromParcel(Parcel in) { return new Person(in); } @Override public Person[] newArray(int size) { return new Person[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(age); } }
二、在aidl文件夾下創建相應的Person.aidl文件,裏面寫入
parcelable Person;(parceleable必需要小寫)
三、而且在Aidl文件中傳遞自定義的數據類型時必須在類型前面加入in out 關鍵詞
四、一樣在Client模塊中相同位置創建相同的類及Aidl文件