我正在开发在后台运行的应用程序,需要每1分钟(60 * 1000毫秒)调用api,且不会出现任何波动。我已经尝试了Scheduler,timer和其他东西,但是它不能正常工作。例如,我的场景是在09:11:36 am(第一个api调用),09:12:36 am(第二个api调用)上调用api,依此类推,最后,最终的api调用将在11:下午20:36。我用下面的代码:
Handler minuteHandler = new Handler();
minuteHandler.postDelayed(runnable, 60000);
final Runnable runnable = new Runnable() {
@Override
public void run() {
// your runnable code
minuteHandler.removeCallbacks(runnable);
minuteHandler.postDelayed(runnable, 60000);
}
};
和
new Timer("threadname", true).scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// your runnable code
}
}, 0,60*1000);
等, 我的问题是,有可能在android(所有操作系统版本)中实现。
答案 0 :(得分:0)
尝试使用前景服务使用AlarmManager.setAlarmClock(API 21)或setExactAndAllowWhileIdle(API 23)。这是我发现在Android的Dose模式下在后台工作的唯一内容。
请注意,处理程序在您的活动暂停或停止时停止,并在恢复活动时恢复。
不确定计时器。但是,我确定当设备处于休眠状态时,它将无法在后台运行。
答案 1 :(得分:0)
您可以在api级别26之前使用service来实现,但是在api级别27上,service会被操作系统自动杀死。