美文网首页
IPC(六)--Messenger使用实例

IPC(六)--Messenger使用实例

作者: azu_test | 来源:发表于2019-02-21 17:01 被阅读0次

    移步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使用实例

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