为什么使用Messenger而不是将参考传递给Handler?

我有一个主要活动和绑定服务。 绑定服务从networking接收命令,触发消息发送到主活动中的处理程序。 通过传递处理程序对服务的引用,我得到了一切工作。 然后…我偶然发现了这个叫做Messenger的东西。

信使:引用一个处理程序,其他人可以使用它来发送消息。 这允许跨进程实现基于消息的通信,方法是在一个进程中创build指向Handler的Messenger,然后将该Messenger交给另一个进程。

这启发了几个问题:

  • 术语过程是否意味着我将不需要使用Messenger,除非我在Process和Thread指导下生成一个单独的过程?
  • 使用Messenger是否总是很好的做法?
  • 传递给Handler的参考通常是一个坏主意?

Related of "为什么使用Messenger而不是将参考传递给Handler?"

术语过程是否意味着我将不需要使用Messenger,除非我在Process和Thread指导下生成一个单独的过程?

这是对的。 如果要绑定远程服务(例如在另一个进程中运行),则需要Messenger 。 在这种情况下,使用指针指向您的Handler远程服务的唯一select是使用Messenger

使用Messenger是否总是很好的做法?

我不会这么说。 在真正需要时使用它 – 用于远程服务,或者如果您启动服务而不绑定它。 您可以将Messenger作为一个额外的包装到一个Intent并启动服务。 因此,您可以将引用传递给Handler而不绑定服务。 Messenger是有用的另一种情况。

传递给Handler的参考通常是一个坏主意?

如果您在活动开始和结束时妥善处理注册和取消注册Handler ,那么您应该没问题。 那么就没有必要使用Messenger进行本地服务了。 如果你没有正确注销处理程序,将会有内存泄漏(服务引用处理程序,处理程序引用已停止的活动)。

尽pipe如此,我更愿意使用奥托事件巴士进行本地服务。

Messenger处理程序的主要优点是,Messenger能够将来自各种客户端的所有消息排队。 而处理程序需要一个活套来做到这一点。 所以messenger在远程进程中在IPC中使用时会带来额外的优势