由于某种原因,我的计时器只运行一次:
验证码:
int i = 0;
private void startTimer() {
final Timer timer = new Timer();
final TimerTask task = new TimerTask() {
@Override
public void run() {
Log.d("DTAG","K1");
if(preferences.getBoolean(IS_RUNNING_KEY, false))
{
Log.d("DTAG","K2");
final int k = i++;
runOnUiThread(new Runnable() {
@Override
public void run() {
timeCounter.setText(""+k);
Log.d("DTAG","K: "+k);
}
});
} else {
Log.d("DTAG","K3");
timer.cancel();
timer.purge();
}
}
};
timer.schedule(task, 1000);
}
日志:
04-12 16:47:32.333 3079-3684/com.michlind.nanytime D/DTAG: K1
04-12 16:47:32.334 3079-3684/com.michlind.nanytime D/DTAG: K2
04-12 16:47:32.338 3079-3079/com.michlind.nanytime D/DTAG: K: 0
3条答案
按热度按时间aurhwmvo1#
这是
schedule(TimerTask, long)
的预期行为。将任务调度为在指定的延迟后单次执行。
请尝试使用
scheduleAtFixedRate
。你可以在这里阅读更多
kognpnkq2#
可以尝试阅读文档以更好地理解Timer
您正在使用的函数
将任务调度为在指定的延迟后单次执行。
使用
用于在经过特定延迟后(即在您的情况下)调度重复固定速率执行的任务
ukxgm1gy3#
你需要用两个参数来调用 schedule 方法。第一个参数是它必须等待多长时间才能启动,第二个参数是执行之间的间隔: