我在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);
答案 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怎么样?我多次使用它来完成相同的任务,但没有遇到过这种问题。