2015-03-03 27 views
0

射擊onTick我有以下CountDownTimerCountDownTimer在也不例外時間點

countdown = new CountDownTimer(10000, 5000) { 
     @Override 
     public void onTick(long millisUntilFinished) { 
      // Stuff here 
     } 

     @Override 
     public void onFinish() { 
      // Restart countdown 
      countdown.start(); 
     } 
    }.start(); 

可以看出,有一個5秒週期的時間間隔。但是,當CountDown開始時,第一個間隔發生在0毫秒。

爲什麼我的第一個滴答聲是在0毫秒的時間內發射的,而不是5000毫秒的時間?

+0

CountDownTimer設置勾選所有5秒,開始在開始第一抽動。爲了避免這種情況,請製作一個簡單的if語句,如if(millisUntilFinished> 0){//在if語句中執行您的內容}; – Opiatefuchs 2015-03-03 12:53:20

+0

@Opiatefuchs不起作用,millilUntilFinished在'start()'上是_not_ 0,它在所需的倒計時時間附近,但不一定總是等於它。 – 2015-03-03 13:01:23

回答

1

所有文檔必須說的關於onTick()是「定期觸發回調」。

http://developer.android.com/reference/android/os/CountDownTimer.html#onTick(long)

爲什麼你假設它不應該立即解僱?

如果想忽略第一個回調onTick()你可以添加一個布爾標誌,像這樣:

countdown = new CountDownTimer(10000, 1000) { 
     private boolean first = true; 
     @Override 
     public void onTick(long millisUntilFinished) { 
      if (first) { 
       first = false; 
       return; 
      } 
      // Stuff here 
     } 

     @Override 
     public void onFinish() { 
      // Restart countdown 
      first = true; 
      countdown.start(); 
     } 
    }.start(); 

看着你的CountDownTimer使用後多一點,好像你也可以使用一個Handler/Runnable組合。

下面是一個例子:

在你Activity你這樣做:

private Handler timerHandler; 
private Runnable timerRunnable; 

// ... 

@Override 
public void onCreate() { 
    super.onCreate(); 
    timerHandler = new Handler(); 
    timerRunnable = new Runnable() { 
     @Override 
     public void run() { 
      // Stuff here 
      timerHandler.postDelayed(timerRunnable, 5000); 
     } 
    }; 
    timerHandler.postDelayed(timerRunnable, 5000); 
} 
+0

這就是我所做的。有點難看,但解決了我的第一個問題。 我認爲不會立即開始,因爲它沒有提到這一點。 – Sonhja 2015-03-03 13:10:39

+0

@Sonhja我再次編輯了我的答案,你也可以使用'Handler' /'Runnable',如果它符合你的需求可能會有點整齊。 – 2015-03-03 14:02:16

+0

是的,我可以使用'Handler' /'Runnable',但我想重複我的計時器,不僅一次。所以我想我會暫時保留你的第一個解決方案。 – Sonhja 2015-03-03 14:05:14