2011-05-14 79 views
2

我有一個服務正在運行,其中一項任務是定期從外部Web主機獲取數據。在找到新數據後,服務應更新主要活動以顯示最新文本。在更新期間,沒有必要將活動放在前臺,但是當活動恢復時,它應該反映來自服務的最新數據。更新服務中的活動數據

我目前的實現有點奇怪,我不禁想到應該有更好的方法來做到這一點。我的方法如下:

活動(MainActivity)實現自定義接口OnDataChangedListener。在MainActivity的onCreate中,它調用服務的靜態方法來註冊自己(MyService.addDataChangedListener(this))。

當服務發現數據發生變化時,它遍歷偵聽器列表並調用onDataChanged(newData)。最後,MainActivity的onDataChanged方法將更改活動的文本以反映新數據。

在onPaused中,我計劃取消註冊偵聽器,並將其重新註冊到onResume中。 onResume也將調用MyService.getDataset()以獲取恢復應用程序時的最新數據。

這種方法看起來好像在Android應用程序的生命週期中不能很好地工作。有人知道更好的方法來處理這個問題嗎? 謝謝!

回答

4

當服務獲得新的數據:

  1. 將數據保存到您的自定義應用程序類:How to declare global variables in Android?

  2. 發送一個廣播說(可能是多個)感興趣的活動聽。不活躍的活動不會收到廣播。

  3. 當活動被激活時,它會檢查應用程序中是否有新數據(因爲它在非活動時沒有得到更新廣播)。

+0

有趣。我不知道如何使用廣播,因爲我只看到廣播喚醒應用程序而不是通知它。 我會嘗試這種方法,並在這裏報告。希望廣播傳送沒有太多延遲。 – Dharwin 2011-05-14 21:46:59

+1

下面是一個例子:http://www.vogella.de/articles/AndroidServices/article.html – 2011-05-14 21:49:26

+0

它完美的工作。謝謝您的幫助。 – Dharwin 2011-05-15 20:24:20

1

我想rathter使用BroadcastReceiver而不是自定義接口。但技術是相同的:在onResume(中註冊它),註銷onPause()。顯然,服務會引發Intent。

相關問題