概述
通过Messenger 我们可以在不同的进程中传递 Message 对象,在Message中放入我们需要传递的数据,就可以轻松地实现进程间通信了。Messenger是一种轻量级的IPC方案,它的底层实现是AIDL,我们可以看下Messenger的构造方法就明白了。从构造方法我们可以明显看出AIDL痕迹,不管是IMessenger还是Stub.asInterface,这种使用都表明它的底层是AIDL。
public Messenger(Handler target) {
mTarget = target.getIMessenger();
}
public Messenger(IBinder target) {
mTarget = IMessenger.Stub.asInterface(target);
}
Messenger的使用方法很简单,它对AIDL做了封装,使得我们可以更简便地进行进程间通信。同时,由于它一次处理一个请求,因此在服务端我们不用考虑线程同步的问题,这是因为服务器不存在并发执行的情形,服务器以串行的方式处理客户端发来的消息。
Messenger中进行数据传输必须将数据放入Message中,而Messenger和Message都实习那了Parcelable接口,因此可以跨进程通信。
优缺点
优点:
- 简单
缺点:
- 服务器以串行的方式处理客户端发来的消息,如果大量的消息同时发送到服务器,服务器仍然只能一个个处理,那么用Messenger就不合适了。
- Messenger的作用是为了跨进程传递消息,很多时候我们可能需要跨进程调用服务端的方法,这种情形用Messenger就无法做到了。