圆形倒数计时器? (毫秒精度)?

Round CountDown timer? (millispersecond accuracy)?

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

有几种选择:

  1. 您可以将正整数四舍五入到最接近的 N,方法是加 N/2,除以 N 再乘以 N:

    ((500 + millisUntilFinished) / 1000) * 1000

  2. 您可以使用一个条件来检查值是否在四舍五入到 10000 的范围内:

    millisUntilFinished >= 9500 && millisUntilFinished < 10500

  3. 您可以第一次检查 millisUntilFinished 跌破 10000:

    boolean printedMessage = false;
    while (true) {
      millisUntilFinished = ...
      if (!printedMessage && millisUntilFinished < 10000) {
        System.out.println("Your message");
        printedMessage = true;
      }
    }