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