我有一个主要的活动和绑定服务。绑定服务从网络接收命令,该命令触发将消息发送到主活动中的处理程序。通过传递Handler对服务的引用,我得到了一切。然后......我偶然发现了一个名为Messenger的东西。
Messenger:对Handler的引用,其他人可以使用它来向其发送消息。这允许跨进程实现基于消息的通信,方法是在一个进程中创建指向处理程序的Messenger,并将该Messenger交给另一个进程。
这引发了一些问题:
答案 0 :(得分:9)
术语过程是否意味着我不需要使用Messenger,除非我 根据Process和Thread指南生成一个单独的流程?
这是对的。如果要绑定远程服务(例如,在另一个进程中运行),则需要Messenger
。在这种情况下,为远程服务提供指向Handler
的指针的唯一选择是使用Messenger
。
使用Messenger总是好的做法吗?
我不会这么说。在真正需要的时候使用它 - 对于远程服务或者如果你开始服务而不绑定它。您可以将Messenger
作为额外内容打包到Intent
并使用它启动服务。因此,您可以在不绑定服务的情况下将引用传递给Handler
。这是Messenger
有用的另一种情况。
传递对Handler的引用通常是一个坏主意吗?
如果您在活动开始和停止时正确处理Handler
的注册和注销,那么您应该没问题。那么就没有必要使用Messenger
进行本地服务。如果你没有正确注销处理程序,就会出现内存泄漏(服务引用处理程序,处理程序引用已停止的活动)。
答案 1 :(得分:0)
Messenger over handler的主要优点是,Messenger能够排队从各种客户端发送的所有消息。虽然Handler需要一个looper来做到这一点。因此,当在远程进程中的IPC中使用时,messenger给出了额外的优势