2016-09-27 58 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