AIDL:Android Interface Definition Language,即Android接口定義語言.
android studio中使用aidl實現跨進程通訊,具體步驟如下:
一:服務端
第一步:第一步:通過as創建一個aidl文件,在app右鍵,如下圖:
輸入自己想要的名字,別的都默認,點擊Finish 我這裏的名字叫 CalculateAidlInterface創建好如下:
再看看 CalculateAidlInterface.aidl 裏面怎麼寫的,其實就一個計算的方法 客戶端傳2個int類型的值,服務端計算和
第二步:CalculateAidlInterface.aidl 編寫完成之後 需要Build–>Make Module app,生成相應的java文件,如下圖:
第三步:接下來,就該完成我們的CalculateAidlService邏輯部分了,CalculateAidlService.java代碼如下:
先說下我遇到的坑,我是通過as右鍵創建的service 他自動會加上下面2個屬性 就會導致客戶端調用不起來,所以記得一定要刪除
android:enabled=”false”
android:exported=”false”
再來看下AndroidManifest.xml中CalculateAidlService的配置:action是客戶端調用用到的
服務端就已經完成了。接下來我們來看一下客戶端的:
二:客戶端
第一步:同樣需要和服務端一樣創建aidl文件,可以把服務器的原封不動的複製過來,包括包名
第二步:再次執行 Build–>Make Module app
再來看下客戶端怎麼調用的?
第三步:先創建一個ServiceConnection 對象
private ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName arg0) {
}
@Override
public void onServiceConnected(ComponentName name, IBinder binder) {
//獲取遠程Service的onBinder方法返回的對象代理
service = CalculateAidlInterface.Stub.asInterface(binder);
if (service != null) {
int calculation = 0;
try {
calculation = service.calculationAddition(1, 2);
} catch (RemoteException e) {
e.printStackTrace();
}
text.setText("我是客戶端:calculationResult = " + calculation);
}
}
};
第四步:綁定
第五部:調用
第六步:不用的時候解除綁定
到此代碼就全部結束了,簡單吧,下面我們來看一下效果如何:
1,服務端的效果
2,客戶端的效果: