如何每x分钟运行一次AsyncTask

时间:2012-09-19 21:47:39

标签: android android-asynctask

我有一个asynctask从webserviece检索数据。我想每5分钟运行一次这个任务,从服务器获取更新的数据,但到现在为止我不知道怎么办。

我尝试了这段代码,但我的AsyncTask没有停止

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

2 个答案:

答案 0 :(得分:3)

根据其他人的建议,您应该使用推送(GCM)而不是民意调查。取自this说:

  

民意调查可能很容易实现,但你永远不会实际   即时的。如果轮询间隔为30分钟,则可以收到消息   那是迟到的29分59秒。而且,更经常地进行民意调查   每15-30分钟就会很快杀死你的电池:   https://labs.ericsson.com/apis/mobile-java-push/blog/save-device-battery-mobile-java-push

答案 1 :(得分:1)

正如Michal K所说,您可以AlarmManager使用Service和/或BroadcastReceiver定期唤醒您的应用。

但是,为了保护用户的电池,我强烈建议不要轮询连接。

相反,您可以使用 Google Cloud Messaging for Android GCM (以前称为C2DM)

这是网站: http://developer.android.com/guide/google/gcm/index.html

编辑

此处的主要好处是拥有Google帐户的Android手机将定期对Google的服务器进行投票。他们通过运营商的合作(如Verizon / AT& T)来实现这一目标。因此,无线电可以进入低功耗模式并接收推送通知。通过使用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