我正在运行服务,其任务之一是定期从外部Web主机获取数据。在找到新数据后,服务应更新主要活动以显示最新文本。更新期间不需要活动在前台,但是当活动恢复时,它应该反映服务中的最新数据。
我目前的实施有点奇怪,我不禁想到应该有更好的方法来实现它。我的方法如下:
活动(MainActivity)实现自定义接口OnDataChangedListener。在MainActivity的onCreate中,它调用服务的静态方法来注册自己(MyService.addDataChangedListener(this))。
当服务发现数据发生更改时,它会遍历其侦听器列表并调用onDataChanged(newData)。最后,MainActivity的onDataChanged方法将更改活动的文本以反映新数据。
在onPaused中,我计划取消注册侦听器,并在onResume中重新注册它。 onResume还将调用MyService.getDataset()以在恢复应用程序时获取最新数据。
这种方法似乎无法在Android应用程序的生命周期内生存。有没有人知道更好的方法来解决这个问题? 谢谢!
答案 0 :(得分:4)
当服务获得新数据时:
将数据保存到自定义应用类:How to declare global variables in Android?
发送(可能有多个)感兴趣的活动收听的广播。非活动的活动不接收广播。
当激活活动时,它会检查应用程序中是否有新数据(因为它在非活动时没有获得更新广播)。
答案 1 :(得分:1)
我会使用BroadcastReceiver而不是自定义界面。但技术是相同的:在onResume(
中注册,在onPause()
中取消注册。显然,服务可以激发意图。