Runnable的执行速度低于预期

时间:2011-03-26 07:25:51

标签: android runnable postdelayed

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

为什么runnable / postDelayed()没有运行正确的时间? postDelayed()时间可靠吗? runnable递减变量,然后使用它来EditText更新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);

2 个答案:

答案 0 :(得分: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);  
}

答案 1 :(得分:1)

使用CountDownTimer怎么样?我多次使用它来完成相同的任务,但没有遇到过这种问题。