从Intent服务更新活动UI?

时间:2014-06-12 11:45:29

标签: java android android-ui intentservice

我需要从我的应用中的服务下载一些文件(10-20或取决于用户)。问题是我使用IntentSevice并且发现很难更新活动UI。我知道以下更新UI的方法

  1. 使用处理程序,并使用this等Messenger将服务中的消息发送到活动。
  2. 发送广播意图。
  3. 一旦活动关闭,使用第一种方法会导致问题。重新开放,我也不确定它的表现。使用秒肯定会导致性能问题,因为我需要非常频繁地更新UI(每两秒一次或两次)。有没有其他可能的方法在IntentService和Activity之间交换数据,这是有效的?或者我必须将其切换到绑定服务?

2 个答案:

答案 0 :(得分:3)

  

有没有其他可能的方法在IntentService和Activity之间交换数据是否有效?

使用活动总线,如LocalBroadcastManager,greenrobot的EventBus或Square的Otto。根据需要进行IntentService发布事件(例如,文件下载完成时)。您的活动/片段可以在事件来自前台时注册和注销事件。如果它们位于前台,则它们将接收该事件并能够更新UI。您甚至可以检测前台用户界面是否选择了该事件,并在需要时让服务显示Notification

This directory包含三个示例应用程序,用于演示我引用的三个事件总线实现。而且,FWIW,here is the PDF of slides,我在最近的网络研讨会上使用事件总线。

答案 1 :(得分:0)

尝试LocalBroadcastManager(http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html)。比广播服务更快。