2013-06-01 15 views
0

我想實現一個CountDownTimer發佈可視文本倒計時,直到我到0,然後發送特定的消息。一切工作正常,直到我達到3秒鐘,它調用我的done()方法兩次;一次只剩3秒鐘,一次計數器完成。程序與CountDownTimer很好,直到有3秒左右,然後它調用兩次

我確定調用done()的唯一時間是在此CountDownTimer()中的onFinish()被調用時。我不知道它爲什麼要兩次打電話,而且始終在同一時間。

我的Java代碼:

mainCounter = new CountDownTimer(30000, 1000){ 
@Override 
public void onTick(long millisUntilDone){ 
    int hours = (int) (millisUntilDone/3600000); 
    int mins = 0, secs = 0; 
    long timeLeft = millisUntilDone % 3600000; 
    if((int)timeLeft != 0){ 
     mins = (int) (timeLeft/60000); 
    } 
    long timeLeftStill = timeLeft % 60000; 
    if((int)timeLeftStill != 0){ 
     secs = (int) (timeLeftStill/1000); 
    } 

    ((TextView)findViewById(R.id.timer_label)).setText("You have " + hours + " hours, " + mins + " mins, " + secs + " secs left"); 
    } 

    @Override 
    public void onFinish() { 
    // Send Message, Out of Time 
    ((TextView)findViewById(R.id.timer_label)).setText("MESSAGE!"); 
     num++; 
     done(); //My Own Method 
     this.cancel(); 
    } 
}.start(); 

我有一個完美的作品另一個櫃檯,我評論它,以確保它不會影響這個計數器,就像我說這個人正常工作,直到我去還剩3秒。

+0

Trail.java文件中的行「178」是什麼?你的應用中是否有GPS功能?爲什麼要調整'OnLocationChange'? –

+0

第178行是其他((TextView)findViewById(R.id.locat_label))。setText(「Other message!」);我打算在LogCat中添加LogCat,表示它是第100行,但意外添加了註釋掉的那一個。是的,我正在以極快的速度工作。 – zgc7009

+0

如果它不是你不願意展示的那個,請添加正確的一個。 –

回答

1

對於您在撥打3秒鐘時撥打onFinish()方法的問題,您應該閱讀答案here。其實你應該閱讀關於Android: CountDownTimer skips last onTick()!問題的所有答案。它會幫助你理解原因。說話的線程,通常人們都有問題,完成被稱爲約。在估計時間前1秒。對於他們來說,可以理解(從引用的答案),在每次打勾開始時,在onTick()被調用之前,計算直到倒計時結束的剩餘時間。如果此時間小於倒計時時間間隔,則不會再調用onTick。但是,那裏的答案還表明,在後臺可能會有其他進程延遲線程運行CountDownTimer,並且在調用CountDownTimer的消息處理程序時,Android本身可能會產生一個小延遲,所以您不希望的延遲可能是因爲所有這些。

答案中提出了一些解決方法。一種是減少間隔時間或增加最大countDownTimer值。另外還有一種方法countDownTimer。希望這可以幫助您瞭解可能的原因,並會幫助您執行解決方法。

+0

我很感謝你的回覆,我會去看看。我所遇到的問題不一定是它被稱爲早期的3小時以外並不意味着太多。事實上它被稱爲兩次,即使它只應該被調用一次。希望你的鏈接有幫助。謝謝你的時間。 – zgc7009

+0

我很想知道爲什麼會發生。所以,如果你得到答案,請做好準備。 :)。祝一切順利! –

+0

現在,我已經實現了一些有趣的工作,但工作很好,但在代碼中看起來很糟糕。我還沒有機會閱讀,當我弄清楚什麼是問題時,我一定會更新。再次感謝。 – zgc7009

相關問題