服务到活动粘性通信

时间:2013-03-09 13:09:20

标签: android ipc android-service

我有一项服务,可以从互联网上下载一些数据,并定期向指标活动发送进度。在处理服务结束时发送结果。

我有一个问题是什么是实现沟通持久性的最佳方式。

  • Messenger或ResultReceiver,我需要将它们包含到Intent中并存储服务中的侦听器列表。但是在配置更改活动破坏时,很难维护此列表。

  • LocalBroadcastManager,我需要从Messages迁移到Intents,并且此类中没有粘性发送。因此,如果我在进度活动处于后台时得到结果,结果将会丢失。

  • BroadcastManager很好,但我不需要广播我的进度系统和安全问题。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

您可能想尝试一下Otto(http://square.github.io/otto/)。

在您的服务中,只要您想与活动进行通信,请使用共享的Bus发布新活动。您应该在主线程上使用处理程序或主循环器执行此操作,因为您可能正在使用IntentService。该服务也可以作为生产者。重新创建活动后,将发布当前已知值。

您的活动只需要在Bus注册并订阅正确的活动。暂停时,只需注销Bus即可。

答案 1 :(得分:0)

我相信实现这种持久性的最佳方式是:

  • 服务下载后,您应将数据保存在数据库或文件中。

  • 然后该服务发送广播进行更新。

  • 如果活动“活着”,一切顺利,它会转到数据库/文件以获取更新的内容。

  • 如果活动被杀死了,您只需要确保数据在数据库/文件中,这样当您启动/重新启动活动时,您可以从数据库/文件中获取最新内容。

  • 下载时保持状态和进度保存在db / file中的方式相同。

检查this Google I / O会话,它解释了这非常好。

答案 2 :(得分:0)

在Application类中使用静态变量(扩展Application)。在内部服务中设置此变量。在Inside Activity中,你会定期阅读这些变量。

答案 3 :(得分:0)

您应该使用massenger发送下载进度,因为它比广播接收器更安全,更便宜。