Android中AIDL的使用

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信息:

项目结构如下:


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值