2012-11-17 69 views
3

有沒有辦法連續循環通過倒數計時器?我有一個60秒的基本定時器,然後更新一個文本字段,它的工作,但我想添加的功能:當它倒計時,自動重新啓動,直到用戶取消它?也許通過線程運行它?不知道如何處理它。這裏是我有什麼,並再次,此代碼的工作,但我只能停止和啓動倒計時,而不是做一個連續的循環:循環播放CountDownTimer是調用start()我想做一個倒計時計時器做一個連續的循環在Android - 需要意見如何做到這一點

cdt = new CountDownTimer(60000,1000) { 
    public void onTick(long millisUntilFinished) { 
     tvTimer.setText("remaining : " + millisUntilFinished/1000 + " secs"); 
    } 
    public void onFinish() { 
     tvTimer.setText(""); 
     bell.start(); 
    } 
}; 

/***************On Click/Touch Listeners*******************/ 
btnNext.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
     tvTimer.setText(""); 
     btnStart.setText("Start Timer"); 
     SetImageView2(myDbHelper); 
     cdt.cancel(); 

     } 
    }); 

    btnStart.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
     if (!TimerTicking){ 
      cdt.start(); 
      btnStart.setText("Stop Timer"); 
     } 
     else { 
      tvTimer.setText(""); 
      cdt.cancel(); 
      btnStart.setText("Start Timer"); 

     } 
     } 
    }); 

回答

4

一個非常基本的方法onFinished()

public void onFinish() { 
    ... 
    start(); // Start this timer over 
} 

(請確保您取消CountDownTimer在onPause(),當你做到這一點,否則定時器可​​能會泄漏,並在後臺繼續射擊......哎呀。)

然而CountDownTimers有根本缺陷(在我看來):經常跳到onTick()最後一次通話,並獲得幾毫秒每次onTick()叫... :(我重新寫CountDownTimer在previous question更準確,並呼籲

+0

因此,一個取消()的調用將終止整個倒計時? –

+0

是的,我做了一個快速測試,看到簡單地調用'start()'啓動多個定時器......所以使用'cancel()'來防止這種情況。 – Sam

+0

我不想產卵多個計時器,所以不知道這將是最好的解決方案。我是Android新手,看起來好像做一個線程化的解決方案可能是最好的,但CountDownTimer非常方便。 –

0

的。第一個val使用CountDownTimer()構造函數,總運行時間很長,可以保持接近3億年的值。這對於大多數移動應用程序來說應該足夠長。 :-)

所以只需要用cdt = new CountDownTimer(Long.MAX_VALUE, 1000)來調用一個連續運行一秒的循環。