Android Messenger

Messenger

Android 提供了一个比使用AIDL(Android Interface Definition Language)更简单的IPC(Interprocess communication)方法。

Messenger (信使)顾名思义,作用是传递消息,Messenger通过一个传入的构造Handler来接受消息,
用我们熟悉的handleMessage(Messager msg)来处理消息,而Messenger的实例可以通过send()函数来发送Message消息。通过这种机制简化了跨进程的实现,适合在大多数的场合,应为通常情况下,很少需要关心线程安全问题,而AIDL更适合在多个进程访问同一个service的时候使用。

如何使用

1.实现一个Handler 用于接收消息。
2.使用Handler来创建Messenger。
3.在service的onBind()中返回Messenger的Ibinder,用于在客户端重新构造一个Messenger,而不是直接传递Messenger.
4.在客户端通过onServiceConnected()返回的Ibinder对象,实例化Messenger,通过这个Messenger来发送Message对象。
5.客户端也可以新建一个Handler来构造一个用于服务器发送反馈的Messenger。这个Messenger可以赋值给message的replyto属性,然后通过与服务器端相关的那个Messenger来发送到服务端。


简单的例子(关键代码)

Service端

class MessengerHandler extends Handler {

@Override
public void handlerMessage(Message msg) {
}
    //在这里处理你的逻辑
}
//实例化Messnger
Messenger messnger = new Messenger(new MessengerHandler());

@Override
public IBinder onBind(Intent intent) {
    return messnger.getBinder();//返回Messnger的Binder对象。
}

客户端

//实现serviceConnection 接口来绑定服务

private Messenger mMessenger;

class MyServiceConnection implements ServiceConnection {

@Override
    public void onServiceConnected(ComponentName name, IBinder service) {
    //构造出于服务端相关的Messenger
    mMessenger = new Messenger(service);
    Message msg = Message.obtain(null,0x01);
    mMessenger.send(msg);//通过这个messenger来发送消息就可以实现IPC通信了。

}
}

猜你喜欢

转载自blog.csdn.net/sd3425973/article/details/44056603