AIDL学习笔记(一)

AIDL:它主要是用来帮助我们跨进程通信的。

它的路径是:app->build->generated->source->aidl->debug下

AIDL通信流程:

1:首先创建客户端的aidl文件,同步工程后就会在相应的目录下生成对

应的.java文件。

2:创建服务接口文件:并在Manifest清单文件中注册服务

public   class   IRemoteService   extends    Service{//当客户端绑定到该服务时会调用

@Override

public    IBinder   onBind(Intent   intent) {

      return     mIBinder;

}

private    IBinder     mIBinder= new    MyAIDL.Stub() {

@Override

public    int    add(int   num1,int    num2)throwsRemoteException{

Log.d("TAG","收到了远程的请求,输入的参数是:"+num1+"和"+num2);

return    num1+num2;

}

};

}

3:同时客户端也要创建对应的aidl文件,在软件创建的时候通过bindService()绑定

服务,在软件销毁时通过unBindService()销毁服务。

下面是绑定服务的代码:

//绑定服务

private voidbindService() {

//获取到服务端

Intentintent= newIntent();

//Android 5.0新版本必须通过显示Intent启动绑定服务

intent.setComponent(newComponentName("control.aidlstudy","control.aidlstudy.IRemoteService"));

bindService(intent,conn,Context.BIND_AUTO_CREATE);

}

绑定服务中的conn参数传入的是:ServiceConnection这个对象有两个方法如下:

privateServiceConnectionconn= newServiceConnection() {

//绑定上服务的时候

@Override

public voidonServiceConnected(ComponentNamename,IBinderservice) {

//得到远程服务

mMyAIDL=MyAIDL.Stub.asInterface(service);

}

//断开服务的时候

@Override

public voidonServiceDisconnected(ComponentNamename) {

//回收资源

}

};

以上就是服务端和客户端通信的过程。下面是点击事件进行的调用远程服务的代码:

public voidonClick(Viewv) {

//用户输入的两个数

intnum1=Integer.parseInt(et_num1.getText().toString());

intnum2=Integer.parseInt(et_num2.getText().toString());

Log.i(TAG,"onClick: num1="+num1+"  num2="+num2);

try{

//调用远程的服务

int res=mMyAIDL.add(num1,num2);

Log.i(TAG,"onClick: res="+res);

et_res.setText(res+"");

}catch(Exceptione) {

e.printStackTrace();

et_res.setText("ERROR");

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容