美文网首页
Messenger的使用

Messenger的使用

作者: Greedy_TZG | 来源:发表于2017-12-03 19:30 被阅读0次

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的基本用法就讲完啦。

相关文章

网友评论

      本文标题:Messenger的使用

      本文链接:https://www.haomeiwen.com/subject/bjwabxtx.html