Android Messenger

来源:互联网 发布:程序员盗600万 编辑:程序博客网 时间:2024/05/02 04:28

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 {@Overridepublic void handlerMessage(Message msg) {}    //在这里处理你的逻辑}//实例化MessngerMessenger messnger = new Messenger(new MessengerHandler());@Overridepublic 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通信了。}}
0 0
原创粉丝点击