2012-09-19 95 views
0

我有一個從webserviece檢索數據的asynctask。我想每5分鐘運行一次這個任務來從服務器獲取更新的數據,但直到現在我不知道該怎麼做。如何每x分鐘運行一次AsyncTask

我想這個代碼,但我的AsyncTask沒有停止

//... 
    Timer timer = new Timer(); 
    timer.schedule(new TimerTask() { 
    public void run() { 
    new AddStringTask().execute(); 
    } 
    }, 0, 5000); 
+2

定時器不會去。如果你想每隔五分鐘運行一段腳本,那麼你的應用程序啓動或不運行(不推薦),那麼'AlarmManager'是你的朋友:http://developer.android.com/reference/android/app/AlarmManager.html –

+1

你不應該每5分鐘連接一次互聯網,你會非常快速地殺死用戶的電池,因爲你不會讓小區無線電進入低功耗模式。更多信息:http://stackoverflow.com/questions/12378289/android-java-how-to-stop-download-after-5-seconds/12378378#12378378注意:如果用戶使用WiFi,這可能並不適用,但它仍然適用。如果需要推廣,請檢查C2DM。 – pjco

+0

如果我每15分鐘需要一次,這是什麼解決方案。 – Basant

回答

1

正如米哈爾K說,你可以使用AlarmManagerService和/或BroadcastReceiver週期性地喚醒你的應用程序。

但是,爲了保留用戶電池我強烈建議不要輪詢連接。

相反,你可以使用Google Cloud Messaging for AndroidGCM(以前稱爲C2DM)

這裏的網站: http://developer.android.com/guide/google/gcm/index.html

編輯

這裏的主要好處是具有Google帳戶的Android手機將會已經定期輪詢Google的服務器。他們通過與運營商的合作來完成此項任務(如Verizon/AT & T)。正因爲如此,收音機可以進入低功耗模式並接收推送通知。通過使用Google的服務,您可以讓應用通過推送通知接收數據,而不會導致任何額外的電量消耗。

====================

(另外,這裏是一些從我的其他一篇關於此信息的)。

今年有一個非常有趣的Google IO談話,關於單元無線電大部分時間處於空閒/低功耗狀態,需要幾秒鐘才能「預熱」。他們還討論瞭如何定期輪詢互聯網真正耗盡電池的危險。

http://www.youtube.com/watch?v=PwC1OlJo5VM

電池通話時間則在大約17:12

http://www.youtube.com/watch?v=PwC1OlJo5VM&feature=player_detailpage#t=1032s

從一個演示幻燈片:

enter image description here

+0

您的意思是在BroadcastReceiver的接收器上調用Asynctask? – Basant

+0

你的'BroadcastReciver'應該啓動你自己的'Service',在那裏你可以調用'AsyncTask'並在那裏工作。 「BroadcastReceiver」並不是要做任何繁重的工作。 – pjco

3

由於從被別人認爲,你應該使用推(GCM)而不是投票。從this採取說:

投票可能容易實現,但你永遠不會成爲真正 實時。如果您的輪詢時間間隔爲30分鐘,則可以收到消息 ,延遲29分59秒。此外,投票往往比 每15-30分鐘會很快殺死你的電池:當你的應用程序不是在前臺進程 https://labs.ericsson.com/apis/mobile-java-push/blog/save-device-battery-mobile-java-push

+0

並排空電池=壞評論+卸載 –

+0

這是非常真實的。 – HelmiB