Messenger是一种轻量级的IPC方案,底层实现是AIDL,它的使用方法如下:
1、在服务端创建一个Handler用于创建Messenger对象:
class MessengerHandler extends Handler{
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case MyConstants.MSG_FROM_CLIENT:
//插入要执行的操作
Log.e(TAG,msg.getData().getString("msg"));
break;
default:
break;
}
}
}
//通过刚刚创建的Handler创建相应的Messenger
private final Messenger mMessenger = new Messenger(new MessengerHandler());
2、在客户端中与服务端进行绑定,绑定成功后服务端会返回一个IBinder对象,然后通过该对象创建一个Messenger,然后就可以通过该Messenger给服务端传递数据了.
如果要接收服务端的返回的数据,就在客户端同样实现一个Handler,然后通过该Handler创建一个Messenger,再在传送Message时,将创建的Messenger赋值给Message实例的replyTo即可
/**
* 用于连接服务端和客户端
*/
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
mService = new Messenger(iBinder);
sendMsgToService("Connected");
Log.e(TAG,"Connected");
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
Log.e(TAG,"Disconnected");
}
};
/**
* 重写客户端onCreate方法
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//启动服务
Intent intent = new Intent(this,MessengerService.class);
startService(intent);
//绑定服务和客户端
bindService(intent,mConnection, Context.BIND_AUTO_CREATE);
}
/**
* 用用于给服务端发送消息
*/
private void sendMsgToService(String message){
Message msg = Message.obtain(null,MyConstants.MSG_FROM_CLIENT);
Bundle data = new Bundle();
data.putString("msg",message);
msg.setData(data);
//用于接收数据
msg.replyTo = mMessenger;
try{
mService.send(msg);
}catch (Exception e){
e.printStackTrace();
}
}
到此Messenger的基本用法就讲完啦。