您的位置:首页 > 大数据 > 人工智能

使用Messenger的IPC

2016-01-28 11:06 351 查看
以下是个人理解,错的地方希望指正出来,谢谢。

想要跨进程的通讯,有两种方法,一种是使用aidl,这个前面文章有提到。

还有一种是使用Messenger对象,这个对象实现了Parcelable接口。

在服务端的Service中我们要先实例化一个Messenger对象,传入一个Handler,并且重写handleMessage方法,用来处理客户端发来的消息。

然后在onBind方法中返回mMessenger.getBinder();

之后是客户端,客户端想要与之通讯,必须持有服务端的IBinder。

bindService的ServiceConncetion中拿到Messenger对象,可以使用实例化Messenger,把IBinder做参数传入。

实际上在实例化Messenger时,我们客户端持有的是远程的Binder,只是Android系统帮我们拿到了aidl接口。

拿到mMessenger时,就可以mMessenger.send(Message msg);实现通讯了。

那我们应该怎样让服务端来返回数据呢?

我们可以在send之前,让msg.replyTo=Messenger;这是一个新得实例化的Messenger,用来接收服务端的数据,和obj的使用时一样的。

在服务端就可以通过msg.replyTo拿到客户端的Messenger,之后就可以通过Messenger.send();把数据返回给我们的客户端,以达到双向通讯的效果。

而前面说到,我们如果想要发送数据到服务端,使用msg.obj是会出异常的,所以我们必须使用实现parcelable接口的方法来传递数据,还没有搞懂,稍后传上去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  aidl 通讯 messenger ipc