挫折崗位....android CountDownTimer - 最後onTick沒有調用 - 使用什麼乾淨的解決方案?
我只是偶然發現了「CountDownTimer - 最後onTick沒有叫」的問題,許多人在這裏報道。
簡單的演示顯示問題
package com.example.gosh;
import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.util.Log;
public class CountDownTimerSucksActivity extends Activity {
int iDontWantThis = 0; // choose 100 and it works yet ...
private static final String TAG = "CountDownTimerSucksActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new MyCountDownTimer(10000 + iDontWantThis , 1000).start();
}
class MyCountDownTimer extends CountDownTimer {
long startSec;
public MyCountDownTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
// TODO Auto-generated constructor stub
startSec = System.currentTimeMillis() ;
}
@Override
public void onFinish() {
// TODO Auto-generated method stub
Log.e(TAG, " onFinish (" + getSeconds() + ")");
}
@Override
public void onTick(long millisUntilFinished) {
// TODO Auto-generated method stub
Log.e(TAG, millisUntilFinished + " millisUntilFinished" + " (" + getSeconds() + ")");
}
protected long getSeconds() {
return (((System.currentTimeMillis() - startSec)/1000) % 60);
}
}
}
從試運行輸出的logcat的......
正如你所看到的最後一次通話onTick與1963ms millisUntilFinished發生,那麼,接下來的通話在接近2秒後完成。當然是一個馬車行爲。我在這個尚未清潔的解決方案中發現了很多帖子。一個我包含在源代碼中,如果你將iDontWantThis字段設置爲100,它就可以工作。
我不介意在次要領域的解決方法,但這似乎是一個核心功能,我不知道它尚未修復。你們在做什麼來爲此做一個乾淨的解決方案?
非常感謝
馬丁
UPDATE:
由薩姆CountDownTimer的一個非常有用的修正,它不會在最後一跳surpresses由於內部毫秒的延遲,還可以防止積聚ms延遲隨着時間的推移可以發現here
非常感謝,很新的Android和我還沒有做的步驟其實看看它的源代碼,在這樣的情況下。非常感謝我指出了這一步。我會按照建議實現我自己的CountDownTimer,如果millisUntilFinished> 0,我總是可以調用onTick,並且如果剩下的millis允許我想做的事情,我可以很容易地檢查(實際上,我只需要倒數計時器,它顯示6,5,4,3,2 ,1,0) – dorjeduck
只是爲了完整起見,刪除下面的其他內容,如果block做的工作有ontick調用,只要有millis左邊------------------- ---------------------------------------------} else if(millisLeft
dorjeduck