Android Interface definition language:是Android系统中IPC通讯的一种方式,也就是进程间通讯的一种方式,通过AIDL描述的接口,可以实现两个进程之间的相互通讯,这两个进程一般称为服务端和客户端,客户端即向服务端发送数据,服务端得到客户端发送过来的数据后,返回给客户端结果。
AIDL的实现步骤:
1.在Server端定义一个.aidl文件,并在该文件中定义一个接口,这步完成之后,会自动在gen文件夹中生成把.aidl文件编译成Java代码;
2.在server端创建Service类,并实现该接口;
3.把接口暴露给Client端,从而进行数据通讯;
具体实现:
1.在Server端定义一个.aidl文件,并在该文件中定义一个接口:
package com.aidl;
interface IServer{
String getInfo(String info);
}
注意:这里包名必须合适;
2.在server端创建Service类,并实现该接口:
public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return binder;
}
IBinder binder=new IServer.Stub() {
@Override
public String getInfo(String info) throws RemoteException {
// TODO Auto-generated method stub
if("client".equals(info)){
return "服务端已成功接收";
}
return null;
}
};
}
3.把接口暴露给Client端:
public class MainActivity extends Activity implements OnClickListener {
private Button button;
private Intent intent;
private MyConn conn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button) findViewById(R.id.button);
button.setOnClickListener(this);
conn=new MyConn();
}
@Override
public void onClick(View v) {
intent=new Intent("server");
switch (v.getId()) {
case R.id.button:
//绑定服务
bindService(intent, conn, Context.BIND_AUTO_CREATE);
break;
default:
break;
}
}
/**
*
* 实现SerViceConnection,必须重写以下两个方法
*
*/
class MyConn implements ServiceConnection{
/**
* 与服务连接成功时回调
*/
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
IServer iServer=IServer.Stub.asInterface(service);
try {
String result=iServer.getInfo("client");
Log.i("TAG", "reult="+result);
} catch (RemoteException e) {
e.printStackTrace();
}
}
/**
* 断开连接时回调
*/
@Override
public void onServiceDisconnected(ComponentName name) {
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//解除服务绑定
unbindService(conn);
}
}
当点击按钮时,进行绑定服务,从而进行Server端与Client端之间的通讯,先运行Server端,然后运行Client端,点击按钮,Log成功打印,说明服务器成功返回给Client信息:
项目结构如下: