我在代码中使用 countDownTimer。问题是,倒计时器不准确。 onTick 方法并不总是每秒执行一次,它可能会延迟几毫秒。当尝试基于 millisUntilFinished 执行某个任务时,这会成为一个问题。我试图在 20 秒计时器过去 10 秒时进行记录:
相关代码如下:
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:
((500 + millisUntilFinished)/1000) * 1000
您可以使用一个条件来仅检查该值是否在四舍五入为 10000 的范围内:
millisUntilFinished >= 9500 && millisUntilFinished < 10500
您可以第一次检查
millisUntilFinished
是否低于 10000:boolean printedMessage = false; while (true) { millisUntilFinished = ... if (!printedMessage && millisUntilFinished < 10000) { System.out.println("Your message"); printedMessage = true; } }
关于java - 倒数计时器? (毫秒精度)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33533364/