利用Handler实现BroadcastReceiver或者Messenger

15
我有一个需要向活动(Activity)传递消息的IntentService。我知道两种方法。
  1. 在Service端使用sendBroadcast(),同时在Activity端注册一个broadcastReciever以接收消息。
  2. 将Messenger传递到Service端,它将指向Activity端的Handler,该Handler准备从Service接收消息。
哪种方法适用于哪种目的?或者两者都是相同的吗?
1个回答

11
如果你的 IntentService 不知道活动是否存在(例如,可能已被销毁),或者有多个活动可能在前台并且想要了解正在发生什么,那么我建议使用 sendOrderedBroadcast()。如我在这篇博客文章中所述,并在这个示例项目中演示,您还可以安排一个“备份”BroadcastReceiver,如果需要的话,它可以引发通知。
两种技术都可以工作。

1
所以基本上你的意思是,如果我不关心我的Activity是否“存活”,那么这两种技术同样可以达到相同的目的? - rayman
3
如果您尝试发送消息时Activity已经消失,使用Messenger会出现RemoteObjectException异常,但由于它是已检查的异常,您仍然需要处理它。如果只有一个组件需要了解该事件,并且在该组件不存在时不需要触发通知,则Messenger是最轻量级的解决方案。 - CommonsWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接