2012-04-12 155 views
1

好的,我一直在研究這個問題一小會兒,我還沒有找到一個好的答案。我有一個asynctask,通過Web服務檢查是否有更新到我的數據庫。我只想在每個用戶會話中檢查一次我的應用程序(現在每次我回到主屏幕時都會檢查它)。因此,如果我關閉應用程序並停止進程並再次打開它,它將再次檢查Web服務。Android:每次會話運行一次asynctask

我已閱讀關於使用共享偏好,但我只能想到這樣做有史以來第一次運行應用程序。

我想過在我的共享首選項中保存一個時間戳,然後檢查自我上次的時間戳以來是否超過30分鐘。但是,這似乎很複雜,我需要什麼。

有什麼想法嗎?

回答

3

共享偏好實際上非常簡單。您可以將變量設置爲共享首選項。例如「0」當您啓動異步時,該值將更改爲「1」。所以異步將永遠不會運行。退出時,將共享首選項設置回「0」。用戶下一次啓動程序時,asyncTask將運行並再次將值設置回「1」。所以當你回到主屏幕時,asyn不會運行。這是你想要的?

+0

有點,我該如何確定我的應用程序何時退出? – 2012-04-12 03:08:24

+0

將sharedPref設置爲你想要的值並運行finish(); 'http:// developer.android.com/reference/android/app/Activity.html' – Hexark 2012-04-12 03:26:34

+0

好吧,它終於有道理。我沒有意識到你可以重寫android onDestroy()方法。所以在我重寫的onDestroy中,我可以將共享pref設置回0.我想這是一個簡單的問題。但有時你只需要有人幫助你找出你錯過的東西。 – 2012-04-12 03:35:20

2

好吧,我想說我從來沒有真正能夠讓我接受工作的解決方案。這在理論上是有道理的,但每次我回到同一個屏幕時,它會調用finish()方法。因此,我每次回到主屏幕時都會檢查更新,這正是我試圖避免的。最後,我最終在unix時間保存了一個時間戳,然後檢查了是否是自上次檢查更新以來的15分鐘。這很好。

+0

你只能在觸發它時調用finish()。就像用戶按退出或什麼的時候一樣。並且在檢查更新後,您的共享前導設置爲「檢查」。當您觸發按鈕時,將其設回「取消選中」並退出。 – Hexark 2012-04-18 06:51:24