IPC(六)--Messenger使用实例

移步Android跨进程通信IPC

使用流程

1.服务端内创建Handler实例,以Handler实例为参数创建Messenger,Messenger持有IMessengeraidl对象。
2.在服务端Service内返回Binder对象。
3.客户端绑定服务端,并通过方法回调内的参数Binder生成IMessenger的aidl对象。
4.通过生成的Messenger实例调用send接口。

代码实例

1. 服务端实例化Handler,以Handler实例为参数创建Messenger
    private class MessengerHandler extends Handler {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what){
                case MSG_FROM_CLIENT:
                    //获取客户端发来的信息
                    Log.d("wuyazhouMessenger","Messenger获取到的信息:"+msg.getData().getString("msg"));
                    break;
                default:
                    super.handleMessage(msg);
            }
        }
    }
    private final Messenger mMessenger = new Messenger(new MessengerHandler());
2. 在服务端Service内返回Binder对象
    @Override
    public IBinder onBind(Intent intent) {
        return mMessenger.getBinder();
    }
3. 客户端Client绑定服务Service获取Binder对象,并通过Binder生成Messenger对象
    private ServiceConnection mConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder serverBinder) {
            mMessenger = new Messenger(serverBinder);
        }
        @Override
        public void onServiceDisconnected(ComponentName componentName) {

        }
    };
    private void initServiceForMessenger(){
        Intent intent = new Intent(mContext, MessengerService.class);
        mContext.bindService(intent,mConnection, Context.BIND_AUTO_CREATE);
    }
    initServiceForMessenger();
4. 通过生成的Messenger实例调用send接口
        Message msg = Message.obtain(null,MSG_FROM_CLIENT);
        Bundle data = new Bundle();
        data.putString("msg","hello, Messenger");
        msg.setData(data);
        mMessenger.send(msg);

说明

Messenger的代码使用上基本上没有什么可注释的,和AIDL使用基本上一样,可能还会更简单一些,具体的解析单开一篇文章。

你可能感兴趣的:(IPC(六)--Messenger使用实例)