【发布时间】:2016-06-01 15:17:59
【问题描述】:
我已经解决了我的问题,但我认为我的解决方案不是最好的。
我想要一个计时器,在有限的时间内每秒更改一个文本。我使用 Handler 和 Runnable 这样做:
private Handler handler;
private Runnable runnable = new Runnable(){
private Date timeSinceLastTask;
@Override
public void run() {
remainingTime--;
if(timeSinceLastTask != null){
Date timeWokeUp = new Date();
long hoursSinceSleep = timeWokeUp.getTime() - timeSinceLastTask.getTime();
if(hoursSinceSleep > 2000){
Log.e("Error", (int)(hoursSinceSleep/1000) + "sec");
remainingTime - (int)(hoursSinceSleep/1000));
}
}
Log.e("Tick", "Tack " + remainingTime);
if(remainingTime > 0){
updateText();
timeSinceLastTask = new Date();
handler.postDelayed(runnable, 1000);
}else{
handler.removeCallbacks(runnable);
}
}
};
我必须添加带有日期的部分来计算最后一个任务的执行时间,因为有时,当设备进入睡眠状态时,我可能需要 50 秒才能执行下一个任务,因此会减慢倒计时。一秒不能超过一秒!
通过我的修复,这很好,但我想知道任务有时在睡眠中执行缓慢的原因是什么。
谢谢!
【问题讨论】:
-
我能否说明不赞成票的原因或解释为什么我的问题值得一票?
-
你为什么不用定时器来代替?
-
那有什么好处?
-
它在什么 API 级别上运行?是 6 岁以上吗?
-
是的,API 15 及更高版本
标签: android task handler runnable