美文网首页
Messager 实现跨进程通信

Messager 实现跨进程通信

作者: that_is_this | 来源:发表于2018-08-02 17:04 被阅读16次

参考:https://blog.csdn.net/lmj623565791/article/details/47017485
https://blog.csdn.net/u014022205/article/details/49590653
https://blog.csdn.net/qq_25722767/article/details/51921090

1. 直接上代码

bindService 启动服务进程,并在 onBind 方法返回 Messager.getBinder() 返回的 iBinder 句柄。回调 onServiceConnected 方法中获取 message = new message(iBinder),然后读取 message 内的信息。最后调用 message.send(msg) 调用 service 进程的逻辑。

msg.what 对应消息类型
msg.data 对应传递数据,类对象需要继承 parcelable 类
msg.replyTo 参数为一个 message 对象,可以拿着直接 send 产生回调
msg.obj 可以传递任何类型消息,类对象需要继承 parcelable 类

服务端

//男方需要创建一个用来处理(女方)客户端发过来的信息的Handler
private static class MessengerHandler extends Handler {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case MyConstants.MSG_FROM_CLIENT:
//这里只是简单的打印出来         

Log.d(MyConstants.TAG_MESSENGER_FOR_IPC, "receive from Client:" + msg.getData().getString("msg")); 
                    break;
                default:
                    super.handleMessage(msg);
            }
        }
    }

//用创建出来的Handler来创建信使
 private final Messenger mMessenger = new Messenger(new MessengerHandler());

//通过onBind方法返回给客户端
 @Override
    public IBinder onBind(Intent intent) {
        return mMessenger.getBinder();
    }

客户端

private ServiceConnection mConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            mService = new Messenger(service);
            Message msg = Message.obtain(null, MyConstants.MSG_FROM_CLIENT);
            Bundle data = new Bundle();
            data.putString("msg", "hello ,this is client");
            msg.setData(data);
            try {
                mService.send(msg);
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    };

//绑定服务
Intent intent = new Intent(this, MessengerService.class);
        bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

可以利用 replyto 产生回调

相关文章

网友评论

      本文标题:Messager 实现跨进程通信

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