Android中的AIDL主要用于两个进程间的通信,大家都知道对于安卓来说一个APP应用就是一个独立的进程,那么要实现两个应用之间的通信,就需要依靠AIDL来实现。
实现的步骤分为客户端和服务端,服务端依靠一个service类来完成,客户端绑定service 这样就可以实现简单的通信。我们以一个简单的计算过程来做了解,具体如下:
首先是服务端建立AIDL文件,和普通的定义接口过程类似,这个文件在客户端也要拷贝一份,作为通信的共同语言。
服务端service类代码编写如下:
package com.example.testaidl;
import com.example.aidl.TestAidl;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
public class AddService extends Service{
@Override
public IBinder onBind(Intent intent) {
return iBinder;
}
private IBinder iBinder=new TestAidl.Stub() {
@Override
public int add(int num1, int num2) throws RemoteException {
return num1+num2;
}
};
}
由于是一个service类 大家不要忘记在mainfest文件进行配置。
接下来就是客户端的实现。我们利用Intent来进行服务的绑定,
private void bindService() {
// TODO Auto-generated method stub
Intent intent=new Intent("com.example.testaidl.AddService");
bindService(intent, conn, Context.BIND_AUTO_CREATE);
}
上面的conn是一个ServiceConnection类 ,我们需要声明一个
ServiceConnection conn=new ServiceConnection() {
//绑定上服务的时候
@Override
public void onServiceDisconnected(ComponentName name) {
testAidl=null;
}
//断开服务的时候
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
testAidl=TestAidl.Stub.asInterface(service);
}
};
看起来很明显,TestAidl.Stub.asInterface(service);这句话用于在绑定成功时从服务端返回一个实例的对象,接下来就可以调用它的方法了。
int result=testAidl.add(Integer.parseInt(editText1.getText().toString()), Integer.parseInt(editText2.getText().toString()));
editText3.setText(result+"");
点击按钮 将数据发送到服务端,进行相加的运算再把结果返回显示。
这样简单的交互就完成了,切记AIDL文件在客户端和服务端都要存在,并且包名要一致。