让 TimerTask 在分钟变化时开始
Make a TimerTask start at the change of minute
我有一个 RecyclerView,其中包含在下一个警报之前的一天、几小时和几分钟的警报。
我使用 运行 和 handler/runnable 的计时器任务来更新 recyclerview 上的视图,以便下一次警报之前的时间是最新的。这工作正常并且每 60 秒更新一次 RecyclerView。但是我希望它能准确地从分钟的变化开始,而不是在分钟之间的中间。
我在下面尝试过,它运行没有错误,但并没有在一分钟内完全改变:
super.onStart();
UpdateTask updater = new UpdateTask(new Handler(), this);
Calendar startTime = Calendar.getInstance();
startTime.set(Calendar.SECOND, 0);
updateTimer.schedule(updater, startTime.getTime(), 60000);
这是剩余的代码,以备不时之需:
// Timer task for updating the minutes on the alarms recyclerview
private class UpdateTask extends TimerTask {
Handler handler;
MainAlarmsFragment ref;
public UpdateTask (Handler handler, MainAlarmsFragment ref){
super();
this.handler = handler;
this.ref = ref;
}
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
ref.updateDisplay();
}
});
}
}
在此先感谢您的帮助
添加分钟,因为将秒数设置为 0,你过去的时间。
startTime.add(Calendar.MINUTE,1);
startTime.set(Calendar.SECOND, 0);
试试这个:
super.onStart();
UpdateTask updater = new UpdateTask(new Handler(), this);
updateTimer.schedule(updater, 0, 60000L);// starts immediately
或改进任务计划使用此:
schTaskEx = Executors.newScheduledThreadPool(1);
schFuture = schTaskEx.scheduleAtFixedRate(rnb, 0,60000L, TimeUnit.MILLISECONDS);
其中 rnb
是 Runnable
接口的实例。
编辑
为了延迟固定时间使用60000L
而不是0
我有一个 RecyclerView,其中包含在下一个警报之前的一天、几小时和几分钟的警报。
我使用 运行 和 handler/runnable 的计时器任务来更新 recyclerview 上的视图,以便下一次警报之前的时间是最新的。这工作正常并且每 60 秒更新一次 RecyclerView。但是我希望它能准确地从分钟的变化开始,而不是在分钟之间的中间。
我在下面尝试过,它运行没有错误,但并没有在一分钟内完全改变:
super.onStart();
UpdateTask updater = new UpdateTask(new Handler(), this);
Calendar startTime = Calendar.getInstance();
startTime.set(Calendar.SECOND, 0);
updateTimer.schedule(updater, startTime.getTime(), 60000);
这是剩余的代码,以备不时之需:
// Timer task for updating the minutes on the alarms recyclerview
private class UpdateTask extends TimerTask {
Handler handler;
MainAlarmsFragment ref;
public UpdateTask (Handler handler, MainAlarmsFragment ref){
super();
this.handler = handler;
this.ref = ref;
}
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
ref.updateDisplay();
}
});
}
}
在此先感谢您的帮助
添加分钟,因为将秒数设置为 0,你过去的时间。
startTime.add(Calendar.MINUTE,1);
startTime.set(Calendar.SECOND, 0);
试试这个:
super.onStart();
UpdateTask updater = new UpdateTask(new Handler(), this);
updateTimer.schedule(updater, 0, 60000L);// starts immediately
或改进任务计划使用此:
schTaskEx = Executors.newScheduledThreadPool(1);
schFuture = schTaskEx.scheduleAtFixedRate(rnb, 0,60000L, TimeUnit.MILLISECONDS);
其中 rnb
是 Runnable
接口的实例。
编辑
为了延迟固定时间使用60000L
而不是0