我在代码中使用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;
  }
}

09-09 17:35