Messenger可以在不同进程中传递Message对象,我们在Message中加入我们想要传的数据就可以在进程间的进行数据传递了。Messenger是一种轻量级的IPC方案并对AIDL 进行了封装,它实现起来比较容易,下面我们来看看如何实现。
首先我们先写服务端(MessengerService.java),在onBind方法中创建Messenger,关联接收消息的Handler调用getBinder来获取Binder对象,在handleMessage方法中接收客户端发来的信息。
1 | public class MessengerService extends Service { |
当然别忘了注册servce时要另开一个进程:
1 | <service android:name=".MessengerService" android:process=":remote"></service> |
接下来创建客户端(MessengerActivity.java),绑定另一个进程的servce,绑定成功以后根据服务端返回的Binder对象创建Messenger,并用Messenger向服务端发送信息。

服务端现在收到了客户端的消息,但是服务端现在无法回应客户端,现在我们来修改代码使服务端回应客户端,客户端也能收到服务端的回应。
首先我们修改服务端(MessengerService.java),在handleMessage回调中收到客户端信息时,我们调用Message.replyTo得到客户端传过来的Messenger对象,创建消息并通过Messenger发送给客户端。
1 | private Handler mHandler = new Handler() { |
最后我们修改客户端(MessengerActivity.java),客户端需要创建一个Handler来接收服务端的信息
1 | private Handler mHandler = new Handler() { |
前面我们在服务端调用Message.replyTo得到客户端传过来的Messenger对象,可是客户端并没有传送Messenger对象啊,现在我们加上这段代码将Messenger对象传给服务端,当然需要关联我们定义的Handler。
1 | private ServiceConnection mServiceConnection=new ServiceConnection() { |
