在单独的线程中运行服务并每隔10分钟唤醒一次?

时间:2012-01-20 10:10:45

标签: java android multithreading android-service

我的应用每隔10分钟就会访问一个Web服务来访问数据(即使应用程序不在前台)。最好的方法是什么?

首先我需要在seaparate线程中启动我的服务吗? 以及如何让它每10分钟从服务器获得更新?有人说handler.postdelayed和一些使用Alarm Manager。哪一个更好,我们有一些例子。

4 个答案:

答案 0 :(得分:4)

如果在您的应用程序运行时进行更新,您可以按照其他答案或较新的ScheduledThreadPoolExecutor建议使用计时器。 如果您的应用程序即使在未运行时也会更新,您应该使用AlarmManager

  

警报管理器适用于您想要的情况   应用程序代码在特定时间运行,即使您的应用程序是   目前没有运行。

请注意,如果您计划在应用程序关闭时进行更新,则每十分钟一次是非常频繁的,因此可能有点过于耗电。

答案 1 :(得分:1)

杰弗里·夏基(Jeffrey Sharkey)在Google IO 2009上就这一主题进行了精彩的演讲,请从幻灯片21中仔细观察。

这应该会为您提供有关该主题的最佳实践的良好介绍。

摘录:请勿使用处理程序或计时器,请使用AlarmManager和setInexactRepeating(..)

答案 2 :(得分:0)

您可以使用java.util.TimerScheduledThreadPoolExecutor(首选)安排在后台线程上定期执行操作。

以下是使用后者的示例:

ScheduledExecutorService scheduler =
    Executors.newSingleThreadScheduledExecutor();

scheduler.scheduleAtFixedRate
      (new Runnable() {
         public void run() {
            // call service
         }
      }, 0, 10, TimeUnit.MINUTES);

答案 3 :(得分:0)

实际上,我使用Timer来完全相同的情况,它适用于我。

timer = new Timer();

    timer.scheduleAtFixedRate(new TimerTask() {

        synchronized public void run() {

            \\ here your todo;
            }

        }}, 60000, 60000);