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