2016-09-27 66 views
0

我有一个RecyclerView,其中包含警报,其中包含当天,小时分钟直到下一次警报。使TimerTask在分钟更改时启动

我使用正在运行处理程序/ 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

你在哪里执行该代码? – Vyacheslav

+0

在onstart的片段 –

回答

1

添加分钟因为设置秒为0你让过去的时间。

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

谢谢你完美的工作 –

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

+0

感谢您的回答我其实希望它在不是立即改变分钟开始但我会考虑让它更优化谢谢.. –

+0

@NicholasMuir,你可以更改代码通过传递60000而不是0来延迟首次启动和执行代码 – Vyacheslav