从服务更新活动的数据

时间:2011-05-14 21:21:37

标签: android service lifecycle

我正在运行服务,其任务之一是定期从外部Web主机获取数据。在找到新数据后,服务应更新主要活动以显示最新文本。更新期间不需要活动在前台,但是当活动恢复时,它应该反映服务中的最新数据。

我目前的实施有点奇怪,我不禁想到应该有更好的方法来实现它。我的方法如下:

活动(MainActivity)实现自定义接口OnDataChangedListener。在MainActivity的onCreate中,它调用服务的静态方法来注册自己(MyService.addDataChangedListener(this))。

当服务发现数据发生更改时,它会遍历其侦听器列表并调用onDataChanged(newData)。最后,MainActivity的onDataChanged方法将更改活动的文本以反映新数据。

在onPaused中,我计划取消注册侦听器,并在onResume中重新注册它。 onResume还将调用MyService.getDataset()以在恢复应用程序时获取最新数据。

这种方法似乎无法在Android应用程序的生命周期内生存。有没有人知道更好的方法来解决这个问题? 谢谢!

2 个答案:

答案 0 :(得分:4)

当服务获得新数据时:

  1. 将数据保存到自定义应用类:How to declare global variables in Android?

  2. 发送(可能有多个)感兴趣的活动收听的广播。非活动的活动不接收广播。

  3. 当激活活动时,它会检查应用程序中是否有新数据(因为它在非活动时没有获得更新广播)。

答案 1 :(得分:1)

我会使用BroadcastReceiver而不是自定义界面。但技术是相同的:在onResume(中注册,在onPause()中取消注册。显然,服务可以激发意图。