定时器无法在android上重复如何修复?

时间:2017-12-05 08:39:09

标签: java android timertask

我希望Timer执行重复。 所以我试试这个来源

public static void init() {
    TimerTask timerTask = new TimerTask() {
       @Override
       public void run() {
           Looper.prepare();
           recordWork();
           Looper.loop();
       }
    };
    Timer timer = new Timer();
    timer.schedule(timerTask, 1000, 30000);
}
单击记录按钮时调用

init()

为什么recordWork()只有一个execute? 这个timer不执行重复。

如何解决这个问题?

感谢。

4 个答案:

答案 0 :(得分:0)

使用函数timer.scheduleAtFixedRate() X 秒执行一次计时器。

例如timer.scheduleAtFixedRate(timerTask, new Date(), 2000)现在启动计时器并每2秒执行一次。

答案 1 :(得分:0)

使用如下

  public static void init() {
    TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {
            Looper.prepare();
            recordWork();
            Looper.loop();
        }
    };
    Timer timer = new Timer();
    timer.scheduleAtFixedRate(timerTask, 1000, 30000);
}

使用Timer作为全局变量。并取消它的需要。

 if(timer != null) {
    timer.cancel();
    timer.purge();
    timer = null;
}

答案 2 :(得分:0)

如果您仍然无法修复您的Timertask。不妨试试CountDownTimer https://developer.android.com/reference/android/os/CountDownTimer.html

public void startCountDown() {
    countDownTimer = new CountDownTimer(totalTimeinMillis,intervalBetweenCountdown) {

                @Override
                public void onTick(long millisUntilFinished) {
                    //execute repeating task here
                }

                @Override
                public void onFinish() {

                }
            };
        }

答案 3 :(得分:0)

使用处理程序

Handler handler = new Handler();
int delay = 2000; //milliseconds

handler.postDelayed(new Runnable(){
    public void run(){
        recordWork();
        handler.postDelayed(this, delay);
    }
}, delay);