您的位置:首页 > 移动开发 > Android开发

Android中AIDL的使用

2016-04-20 20:48 495 查看
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信息:



项目结构如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  aidl service android