Android 中如何实现进程间双向通信?
在此可以通过 Messenger与Service 来实现Android间进程的双向通信。接下来我们就详细说下。
我们知道,在Android中Service和Service的调用者既可以在同一个APP中,也可以在不同的APP中。如果在不同的APP间,那么这样就可以使用Service来实现进程间通信了。
接下来重点就来了,我们如何使用bindService和Messenger来实现进程间通信(IPC)
使用Service来实现进程间通信的关键就是Messenger和Ibinder和Handler。
接下来谈下如何使用Messenger:
1.Service需要实现一个Handler,用以处理从客户端接收到的消息。
2.使用该Handler来创建一个Messenger对象,Messenger内部对象会引用该Handler对象。
3.使用创建好的Messenger对象获得一个Ibinder实例,并且将该Ibinder通过Service的onBinder方法返回给客户端。
4.客户端通过收到的IBinder对象实例化一个Messenger对象,该Messenger对象内部就指向Service中的Handler。客户端通过该Messenger对象就可以向service中的Handler发送消息了。
5.在Service中的Hanlder收到消息之后,就可以在Handler中的handleMessenge方法中处理消息。
6.以上的4、5步就完成了客户端向Service发送消息并Service接收到消息的单向通信过程,即 客户端 -> Service。如果要实现Service向客户端回消息的通信过程,即Service -> 客户端,那么前提是在客户端也需要Service一样内部维护有一个指向Handler的Messenger。当在第4步中客户端向Service发送消息时,将Message的replyTo属性设置为客户端自己的Messenger。这样在第5步Service在Handler的handleMessage中处理收到的消息时,可以通过Message的Messenger再向客户端发送消息,这样客户端内部维护的Handler对象就会收到来自于Service的Message,从而完成Service向客户端发送消息且客户端接收到消息的通信过程。