让 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);

其中 rnbRunnable 接口的实例。

编辑

为了延迟固定时间使用60000L而不是0