Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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 计时器/计划执行器服务/作业计划程序工作不正常_Java_Android - Fatal编程技术网

Java 计时器/计划执行器服务/作业计划程序工作不正常

Java 计时器/计划执行器服务/作业计划程序工作不正常,java,android,Java,Android,我需要每60秒调用一次api,没有任何时间延迟。但是,当设备被锁定时,我在使用计时器、ScheduledExecutorService或作业调度器时会跳过秒数。我已经尝试了所有场景,但无法解决此问题。您可以通过使用类似下面演示活动的处理程序来实现相同的效果 public class AnimationActivity extends AppCompatActivity { private Handler handler = new Handler(); Runnable r

我需要每60秒调用一次api,没有任何时间延迟。但是,当设备被锁定时,我在使用计时器、ScheduledExecutorService或作业调度器时会跳过秒数。我已经尝试了所有场景,但无法解决此问题。

您可以通过使用类似下面演示活动的处理程序来实现相同的效果

public class AnimationActivity extends AppCompatActivity {

    private Handler handler = new Handler();


    Runnable runnable = new Runnable() {
        @Override
        public void run()
        {
            //Do your code here for API call
            handler.postDelayed(runnable,60000);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_animation);

        handler.postDelayed(runnable,60000);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(handler!=null && runnable!=null)
        {
            handler.removeCallbacks(runnable);
        }
    }

}

你为什么不试试AlarmManager呢?它对你很有用you@yash786由于alarm manager在最近的api版本中已被弃用,因此我不会尝试alarm manager。您有什么证据表明AlarmManager已被弃用?Android P:28的最新文档在这里。在我的场景中,我在alarm manager中使用setInexactRepeating()和setRepeating()。但由于在最新的操作系统版本中进行了电池优化,它受到了限制。虽然许多API不再像广告中的名称那样工作,但AlarmManager(尚未)被弃用。只有一个API在打瞌睡时正常触发:AlarmManager.setAlarmClock。如果不能做到这一点,则可以使用SetExactAndAllowHileId,前提是可以容忍长达10分钟的延迟。此外,您可能会考虑使用前台服务,因为它们基本上不会在合理的情况下打瞌睡……嗨@Faldu Jaldeep,我尝试过这个解决方案,但在跳过秒/毫秒后,它会在一定时间内工作。