Messenger和AIDL都是IPC通信方案,且Messenger的底层实现是AIDL,故messenger和aidl都是基于Binder的。
Messenger在不同进程中传递Message对象,服务端一次只能处理一个请求,此时不存在并发执行的情况,不用考虑线程同步问题。所以,Messenger支持低并发的一对多串行的通信,支持实时通信。
但Messenger不支持远程过程调用(RPC),数据通过Message传输,只能传输Bundle支持的数据类型。
Messenger以串行的方式处理客户端发来的消息,若大量的消息同时发到服务端,要选择AIDL。
Messenger只能传递消息对象,客户端跨进程调用服务端的方法时,Messenger就无法满足需求了,也要选择AIDL。
使用场景:只是在进程间进行数据传递,不用同时处理大量的消息时,且客户端不用调用服务端的方法时,适合使用Messenger。一对多并发通信且有RPC需求时要用AIDL。
--整理自《Android开发艺术探索》