android 我的TimerTask未运行

pvcm50d1  于 2023-04-18  发布在  Android
关注(0)|答案(3)|浏览(199)

由于某种原因,我的计时器只运行一次:
验证码:

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
aurhwmvo

aurhwmvo1#

这是schedule(TimerTask, long)的预期行为。
将任务调度为在指定的延迟后单次执行。
请尝试使用scheduleAtFixedRate

timer.scheduleAtFixedRate(task, 0, 1000);

你可以在这里阅读更多

kognpnkq

kognpnkq2#

可以尝试阅读文档以更好地理解Timer
您正在使用的函数

Timer.schedule(TimerTask, long)

将任务调度为在指定的延迟后单次执行。
使用

Timer.scheduleAtFixedRate (TimerTask task, long delay, long period)

用于在经过特定延迟后(即在您的情况下)调度重复固定速率执行的任务

timer.scheduleAtFixedRate(task, 0, 1000);
ukxgm1gy

ukxgm1gy3#

你需要用两个参数来调用 schedule 方法。第一个参数是它必须等待多长时间才能启动,第二个参数是执行之间的间隔:

// schedule the timer, after the first 1000ms the TimerTask will run every 1s
 timer.schedule(timerTask, 1000, 1000); //

相关问题