我在代码中使用countDownTimer。问题是,倒数计时器不准确。 onTick方法并不总是每秒执行一次,可能要花几毫秒的时间。当尝试执行基于millisUntilFinished的特定任务时,这成为一个问题。我尝试在20秒计时器的十秒过去后进行记录:
以下是相关代码:
if (millisUntilFinished == 10000) { //TEN SECONDS
Log.v(TAG, "TEN SECONDS LEFT");
}
这里出现了问题,因为countDownTimer甚至可能永远不会具有millisUntilFinished == 10000,它可能等于1001,所以我的代码将无法执行。是否有办法将millisUntilFinished(很长)四舍五入到最接近的千位?我尝试了以下方法:
millisUntilFinishedRounded = MathUtils.round((double) millisUntilFinished, -3); // nearest thousand, 2000.0
但我无法解析“ MathUtils”
我搞不清楚了。我真的很感激任何反馈(正面或负面)!非常感谢您的所有帮助。
{Rich}
最佳答案
有几种选择:
您可以通过将N / 2加N,除以N再乘以N来将正整数舍入到最接近的N:
((500 + millisUntilFinished)/ 1000)* 1000
您可以使用一个条件来检查该值是否在四舍五入到10000的范围内:
millisUntilFinished> = 9500 && millisUntilFinished 您可以第一次检查millisUntilFinished
低于10000:
boolean printedMessage = false;
while (true) {
millisUntilFinished = ...
if (!printedMessage && millisUntilFinished < 10000) {
System.out.println("Your message");
printedMessage = true;
}
}