java - 倒数计时器? (毫秒精度)?

标签 java android math timer clock

我在代码中使用 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/2、除以 N 并再次乘以 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;
      }
    }
    

关于java - 倒数计时器? (毫秒精度)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33533364/

相关文章:

Android:向 tableRow 添加并排 View

c# - 读取屏幕点的像素颜色(高效)

java - 尝试使用 onRestoreInstanceState 设置玩家回合时出现 Android 空指针异常

javascript - 如何从 JavaScript 数字中删除小数部分?

java - 如何解析 JSON 值中的转义字符?

java - 取消文件打开对话框后出现 InterruptedException - 1.6.0_26

java - Eclipse 和外部 src 和 web 内容文件夹链接或映射

java - 定义静态函数的位置(性能方面)重要吗?

c - 使用C标准数学库精确计算标准正态分布的PDF

python - 如何向用户输出力量?