沮丧的帖子....
我刚刚偶然发现了许多人在这里报告的“CountDownTimer - last onTick not called”问题。
显示问题的简单演示
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 发生在 1963 毫秒 millisUntilFinished 时,然后下一次调用在近 2 秒后发生 onFinished。肯定是有问题的行为。我在这方面发现了很多帖子,但还没有干净的解决方案。我在源代码中包含的一个,如果您将 iDontWantThis 字段设置为 100,它可以工作。
我不介意小领域的解决方法,但这似乎是一个核心功能,我无法理解它还没有修复。你们正在做什么来为此提供一个干净的解决方案?
非常感谢
马丁
更新:
Sam 对 CountDownTimer 的一个非常有用的修改,它不会由于内部毫秒延迟而抑制最后一个滴答声,并且还可以防止每个滴答声随着时间的推移而累积毫秒延迟,可以在这里找到