前言:
关于AIDL的介绍与原理不会在这里赘述。在这里通过一个简单“加法计算器”实例来告诉你AIDL到底是怎么用的。
正文:
1、在项目包中创建一个.aidl文件
2、在新建的.aidl文件中实现要做的逻辑方法。这里要做一个加法处理。
interface IAdditionService {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
int add(int x,int y);
}
3、在包中新建一个类,让其继承Service。这里我们需要一个IBinder对象,这个对象代表了远程服务的实现,即数据的交流。我们通过前面做好的.aidl文件中的IAdditionService接口的子类IAdditionService.Stub,来实现add()方法,从而拿到处理后的数据。注意,不要忘记在AndroidManifest.xml中声明服务。
public class AdditionService extends Service {
@Override
public void onCreate() {
super.onCreate();
}
@Override
public IBinder onBind(Intent intent) {
return myBinder;
}
@Override
public void onDestroy() {
super.onDestroy();
}
private final IAdditionService.Stub myBinder=new IAdditionService.Stub() {
@Override
public int add(int x, int y) throws RemoteException {
return x+y;
}
};
}
4、在MainActivity中定义.aidl文件中的结果对象mIAdditionService,然后新建serviceConnection对象,监听服务连接状态。
private IAdditionService mIAdditionService;
private ServiceConnection serviceConnection=new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mIAdditionService=IAdditionService.Stub.asInterface(service);
Toast.makeText(MainActivity.this, "Service connected", Toast.LENGTH_LONG).show();
}
@Override
public void onServiceDisconnected(ComponentName name) {
mIAdditionService=null;
Toast.makeText(MainActivity.this, "Service disconnected", Toast.LENGTH_LONG).show();
}
};
5、在onCreate()中绑定服务
Intent intent=new Intent(MainActivity.this,AdditionService.class);
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
6、通过以上操作就可以调用外部的服务进行数据处理了。
try {
textView3.setText(mIAdditionService.add(x,y)+"");
} catch (RemoteException e) {
e.printStackTrace();
}
7、不要忘记在onDestroy()解绑服务
unbindService(serviceConnection);
mIAdditionService = null;
实例下载地址:http://download.csdn.net/download/android_programmer/10024050