0

我有一个从网络服务检索数据的异步任务。我想每 5 分钟运行一次此任务以从服务器获取更新的数据,但直到现在我不知道该怎么做。

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

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

2 回答 2

3

正如其他人所建议的那样,您应该使用 Push ( GCM ) 而不是 Poll。取自这个说:

轮询可能很容易实现,但你永远不会真正实时。如果轮询间隔为 30 分钟,您可能会收到延迟 29 分 59 秒的消息。此外,比每 15-30 分钟更频繁的轮询会很快耗尽您的电池: https ://labs.ericsson.com/apis/mobile-java-push/blog/save-device-battery-mobile-java-push

于 2012-09-20T01:35:09.290 回答
1

正如 Michal K 所说,您可以使用AlarmManagerService/或BroadcastReceiver定期唤醒您的应用程序。

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

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

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

编辑

这里的主要好处是拥有谷歌账户的安卓手机已经定期轮询谷歌的服务器。他们在运营商(如 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

演示文稿中的一张幻灯片:

在此处输入图像描述

于 2012-09-19T22:39:26.493 回答