Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在单独的线程中运行服务并每10分钟唤醒一次?_Java_Android_Multithreading_Android Service - Fatal编程技术网

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

Java 在单独的线程中运行服务并每10分钟唤醒一次?,java,android,multithreading,android-service,Java,Android,Multithreading,Android Service,我的应用程序将每隔10分钟访问一个Web服务以访问数据(即使应用程序不在前台)。最好的方法是什么 首先,我需要在seaparate线程中启动我的服务吗? 如何让它每10分钟从服务器上更新一次?有些人说handler.postdelayed,有些人使用AlarmManager。哪一个更好,我们有一些例子。您可以使用或(首选)计划在后台线程上定期执行操作 以下是使用后者的示例: ScheduledExecutorService scheduler = Executors.newSingleT

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

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

您可以使用或(首选)计划在后台线程上定期执行操作

以下是使用后者的示例:

ScheduledExecutorService scheduler =
    Executors.newSingleThreadScheduledExecutor();

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

事实上,我使用了
定时器
来处理完全相同的情况,它对我很有效

timer = new Timer();

    timer.scheduleAtFixedRate(new TimerTask() {

        synchronized public void run() {

            \\ here your todo;
            }

        }}, 60000, 60000);

如果更新将在应用程序运行时发生,您可以使用其他答案中建议的计时器或更新的计时器。
如果您的应用程序在未运行时仍将更新,则应使用:

报警管理器适用于您希望 应用程序代码在特定时间运行,即使您的应用程序 当前未运行


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

Jeffrey Sharkey在上对此主题进行了精彩的演示,请仔细观看幻灯片21

这应该能让你很好地了解这个主题的最佳实践


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

计时器有一些缺点,ScheduledThreadPoolExecutor可以解决这些缺点。因此,它不是官方Java文档中So ScheduledExecutor上最好的choiceAlarmManager,举个例子:当心,