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

问题描述 投票:10回答:2

我有一个主要的活动和约束服务。绑定服务从网络接收命令,该命令触发将消息发送到主活动中的处理程序。通过传递Handler对服务的引用,我得到了一切。然后......我偶然发现了这个名为Messenger的东西。

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

这引发了一些问题:

  • 除非我根据Process and Thread指南生成单独的流程,否则术语流程是否意味着我不需要使用Messenger?
  • 使用Messenger总是好的做法吗?
  • 通过对Handler的引用通常是个坏主意吗?
android android-service android-handler
2个回答
9
投票

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

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

使用Messenger总是好的做法吗?

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

通过对Handler的引用通常是个坏主意吗?

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


0
投票

Messenger over handler的主要优点是,Messenger能够对从各种客户端发送的所有消息进行排队。虽然Handler需要一个looper来做到这一点。因此,当在远程进程中的IPC中使用时,messenger提供了额外的优势

© www.soinside.com 2019 - 2024. All rights reserved.