1简介:
Messenger: This allows for the implementation of message-based communication across processes
允许实现基于消息的进程间通信的方式。
Messenger实现IPC通信,底层也是使用了AIDL方式。和AIDL方式不同的是,Messenger方式是利用Handler形式处理,因此,它是线程安全的,这也表示它不支持并发处理;而AIDL方式是非线程安全的,支持并发处理,因此,我们使用AIDL方式时需要保证代码的线程安全。
注意:由于Messenger的消息都是放在Message中进行传输的,所以支持的消息类型也仅支持Bundle支持的消息类型。
Messenger分为服务端进程和客户端进程:
2 服务端进程
我们需要在服务端建立一个service来处理客户端的连接请求,同时创建一个Handler并通过它来创建一个Messenger对象,然后在Service 的onBind中返回这个Messenger对象底层的Binder即可。
3 客户端进程
首先绑定服务端的Service,绑定成功后用服务器返回的IBinder对象创建一个Messenger,通过这个Messenger就可以向服务器发送消息了,发送消息类型为Message对象。如果需要服务端能够回应客户端,就和服务端一样,我们还需要创建一个Handler并创建一个新的Messenger,并把这个Messenger对象通过Message的replyTo参数传递给服务端,服务端通过这个replyTo参数就可以回应客户端了。
4 使用情况
Messenger通过串行的方式处理客户端发来的消息,所以我们如果不是遇到大量的消息发送到服务端和有大量的并发的并发请求的时候,可以选择Messenger进行串行处理,也就是一对多的串行通信。
5具体实例代码:参看下面hongyang的博客,写得非常经典