Вслед за (правильным) ответом @ShadySherif добавление базовых c журналов поможет понять поведение и выделить подозрительное утверждение в вашем коде.
Фрагмент:
// Countdown 10 seconds providing an update every second until finished.
new CountDownTimer(10 * 1000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
Log.d("sotest",Long.toString(millisUntilFinished));
}
@Override
public void onFinish() {
Log.d("sotest","Finish");
}
}.start();
Журнал (обратите внимание, что значения millisUntilFinished
будут меняться при каждом запуске):
2020-07-10 09:32:46.628 9087-9087/calculations D/sotest: 9986
2020-07-10 09:32:47.629 9087-9087/calculations D/sotest: 8985
2020-07-10 09:32:48.630 9087-9087/calculations D/sotest: 7983
2020-07-10 09:32:49.633 9087-9087/calculations D/sotest: 6981
2020-07-10 09:32:50.636 9087-9087/calculations D/sotest: 5978
2020-07-10 09:32:51.640 9087-9087/calculations D/sotest: 4974
2020-07-10 09:32:52.643 9087-9087/calculations D/sotest: 3970
2020-07-10 09:32:53.647 9087-9087/calculations D/sotest: 2967
2020-07-10 09:32:54.650 9087-9087/calculations D/sotest: 1964
2020-07-10 09:32:55.653 9087-9087/calculations D/sotest: 961
2020-07-10 09:32:56.616 9087-9087/calculations D/sotest: Finish
Одно подозрительное утверждение:
// Incorrect, this performs:
// "every time the millisUntilFinished value is a multiple of 60,
// decrement what most likely is a minute value."
if(l % 60 == 0) {
min--;
}
Итак, похоже, вы пытаетесь поддерживать значение минут, выполняя по модулю значение в миллисекундах (которое также содержит ошибку). Это неверно.
Дело в том, что простое ведение журнала может очень помочь в понимании проблем.
Кроме того, из журнала вы можете увидеть интересное поведение, которое является «дрейфом» значение.