在更改分钟时启动TimerTask

时间:2016-09-27 12:54:18

标签: android timertask

我有一个RecyclerView,其中包含警报,其中包含直到下一次警报的日期,小时数。

我使用正在运行处理程序/ runnable的计时器任务来更新recyclerview sot上的视图,直到下一个警报是最新的。这很好用,每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();
                    }
                });
        }
    }

提前感谢您的帮助

2 个答案:

答案 0 :(得分:1)

将您输入过去时间的分钟时间设置为0。

startTime.add(Calendar.MINUTE,1);
startTime.set(Calendar.SECOND, 0);

答案 1 :(得分:1)

试试这个:

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

的固定时间