AIDL的基本概念
- aild定义:AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言。是Android开发中提供的一种快速实现binder的工具,而binder就是一种跨进程通信。
- AIDL支持的基本类型:
1.Java中的基本数据类型除了short类型,包括 byte,int,long,float,double,boolean,char
2.CharSequence
3.String 类型
4.ArrayList,里面的每个元素也必须是AIDL所支持的类型
5.HashMap,里面的每个key和value都必须是AIDL所支持的类型
6.实现Parcelable的类
案例解析
1、定义AIDL文件
IUser.aidl
interface IUser{
void setName(String name);
String getName();
}
2、服务端实现接口
public class MainProHandleRemoteService extends Service {
private String name;
private Binder binder=new IUser.Stub() {
@Override
public void setName(String s) throws RemoteException {
name=s;
}
@Override
public String getName() throws RemoteException {
return name;
}
};
@Nullable
@Override
public IBinder onBind(Intent intent) {
LogUtil.i("onBind");i
return binder;
}
}
3、客户端调用接口
public class AIDLClientAcitvity extends Activity {
//....
private IUser mIUser;
/*
*bindService获取binder后,就可以提供调用相应的方法
*/
private void bindServiceByAidl() {
Intent intent = new Intent(this, AIDLService.class);
bindService(intent, new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
LogUtil.i(TAG,"onServiceConnected");
mIUser= IUser.Stub.asInterface(service);
}
@Overridei
public void onServiceDisconnected(ComponentName name) {
LogUtil.i(TAG,"onServiceDisconnected");
}
}, BIND_AUTO_CREATE);
}
}
总结
Binder.png每一个进程都有自己的一块独立的内存,都在自己的内存上存储自己的数据,执行着自己的操作,都在自己的那片狭小的空间里过完自己的一生。而aidl就类似与两个进程之间的桥梁,使得两个进程之间可以进行数据的传输。
网友评论