我的 TimerTask 不是 运行
My TimerTask not running
出于某种原因,我的计时器只 运行 一次:
代码:
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
这是 schedule(TimerTask, long)
的预期行为。来自文档
Schedule a task for single execution after a specified delay.
请尝试使用 scheduleAtFixedRate
。
timer.scheduleAtFixedRate(task, 0, 1000);
你可以阅读更多here
您需要使用两个参数调用 schedule 方法。首先是它必须等待多少时间才能开始,其次是执行之间的间隔:
// schedule the timer, after the first 1000ms the TimerTask will run every 1s
timer.schedule(timerTask, 1000, 1000); //
可能会尝试阅读文档以更好地理解它Timer
您正在使用的功能
Timer.schedule(TimerTask, long)
安排一个任务在指定的延迟后执行一次。
使用
Timer.scheduleAtFixedRate (TimerTask task, long delay, long period)
用于在特定延迟过去后安排任务以重复固定速率执行,即在您的情况下
timer.schedule(task, 0, 1000);
出于某种原因,我的计时器只 运行 一次:
代码:
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
这是 schedule(TimerTask, long)
的预期行为。来自文档
Schedule a task for single execution after a specified delay.
请尝试使用 scheduleAtFixedRate
。
timer.scheduleAtFixedRate(task, 0, 1000);
你可以阅读更多here
您需要使用两个参数调用 schedule 方法。首先是它必须等待多少时间才能开始,其次是执行之间的间隔:
// schedule the timer, after the first 1000ms the TimerTask will run every 1s
timer.schedule(timerTask, 1000, 1000); //
可能会尝试阅读文档以更好地理解它Timer
您正在使用的功能
Timer.schedule(TimerTask, long)
安排一个任务在指定的延迟后执行一次。
使用
Timer.scheduleAtFixedRate (TimerTask task, long delay, long period)
用于在特定延迟过去后安排任务以重复固定速率执行,即在您的情况下
timer.schedule(task, 0, 1000);