3

我在我的 Android 应用程序中使用 runnable 来更新倒数计时器,如下面的代码所示。它似乎有效,但我注意到我的计时器比预期的要长几秒钟。例如,如果它应该倒计时 3 分钟,则需要 3 分 5 秒。我尝试在服务中使用计时器来管理主要活动中的倒计时显示。计时器/服务按预期工作。

为什么不runnable/postDelayed()运行正确的时间?postDelayed()时间可靠吗?递减一个变量,runnable然后使用它来更新一个EditTextwith setText()。是否setText()需要太长时间(不到一秒),所以runnable真的每 1.x 秒运行一次?

Handler handler = new Handler();
Runnable r = new Runnable() {
   public void run() {
      // decrement the time remaining and update the display
      handler.postDelayed(this, 1000);
   }
};
...
// start the runnable
handler.postDelayed(r, 1000);
4

2 回答 2

2

您的代码有点设计为不准确,因为您没有考虑可运行内容所花费的时间。通过执行类似的操作,您可能会获得更好的结果

public void run(){  
    startTime = System.currentTimeMillis();  
    // compare expectedTime to startTime and compensate  
    // <guts of runnable goes here>
    // now wrap it up...
        delay = 1000 - (System.currentTimeMillis() - startTime);  
    if (delay < 0)  
        delay = 0;
    expectedTime = System.currentTimeMillies() + delay;
    handler.postDelayed(this, delay);  
}
于 2011-03-26T11:00:51.133 回答
1

使用 CountDownTimer 怎么样?我多次将它用于相同的任务并且没有遇到这种问题。

于 2012-06-28T09:44:25.673 回答