2010-07-02 53 views
1

在我的Android應用程序中,我有一些需要每天同步的數據,但是當用戶在應用程序內時,還需要每小時更新一次。在Android應用中實現此行爲的最佳策略?

我已經實現了一項服務,可以從日常更新的警報中調用。我在制定策略來做每小時同步時遇到問題。我也可以使用每小時一次的警報並開啓同樣的意圖,但由於您的應用程序可能隨時被殺死,因此無法取消它(因爲他們使用相同的Intent,取消操作會取消所有警報,包括我的每日同步,所以這可能不太好)。

另一種選擇是使用在應用程序內部設置的定時器,並在應用程序內部激發我的意圖。我假設所有的計時器被取消時,一個應用程序被殺害嗎?但是我的應用程序由幾個活動組成,我希望計時器能夠在所有活動中工作,我該怎麼做?我不想複製代碼 - 我們已經使用Activity和ListActivity的子類。

回答

2

我有一些數據,需要進行 每天同步,但也需要 每小時更新一次當用戶 裏面的應用程序。

解決方案看起來很簡單:放棄第二個要求。由於人們傾向於將Android手機用於其他事物(例如手機),因此很少有應用可以連續使用數小時,因此您的更新每小時如果使用所有時間的代碼可能永遠不會運行。

我可以用一個小時報警也和 火的目的相同,但因爲你的 的應用程序可以在任何時候被殺死,有 就沒有辦法將其取消

FWIW,你應用程序在屏幕上不會被殺死。而且,雖然它不在屏幕上,但您不希望更新每小時進行一次。

我假設所有的定時器都取消了 當一個應用程序被殺死了嗎?

應用程序通常不會「死亡」。我們希望您在使用onDestroy()撥打您的活動後自行清理。如果使用守護線程設置Timer,則需要終止該線程。

但我的應用程序由幾個 活動,我想在所有的活動定時器 工作,我怎麼 做到這一點?

從您的每項活動中綁定到您的服務。如果它是由您的鬧鐘Intent啓動的,請進行正常的更新處理。如果由於綁定請求而啓動,請確保其小時Timer正在運行。當用onDestroy()調用它時(例如,在所有活動都沒有約束之後),讓它停止Timer

+0

其實這*是人們可能會使用數小時的應用程序類型(我不能說它完全沒有違反NDA)。 但是,我決定取消通過定時器/鬧鐘的小時更新的想法。 我決定實施的方案: *每天更新一次,通過一次警報(然後獲取新的數據併爲第二天設置新的警報)。 *如果用戶使用的應用程序,並自上次更新1小時以來,做後臺更新。 *對於一項特定活動,如果用戶更改了某些數據,我會將這些數據推出。 *用戶還可以隨時強制手動更新。 – Eno 2010-07-07 04:58:39

+0

@Eno:聽起來像一個偉大的計劃。 – CommonsWare 2010-07-07 11:57:14

+0

我希望在Android中有更完整的wakelock使用示例。我看了繁忙的編碼器的書,但林很難明白它的理解。 – Eno 2010-07-08 03:17:13

0

您可能可以在後臺服務中運行一個Timer(它比殺死活動少),但仍不能保證Android不會終止您的服務。而像這樣運行的背景可能會使用大量的電池。

如何在後臺線程中執行每小時同步,並在onResume中創建?只需保存用戶最後一次進行同步,並且只要保存了一小時以上,就可以進行同步。因爲我認爲沒有任何理由急於同步用戶永遠不會看到的數據。