设置计时器以多次执行任务

时间:2019-04-23 16:05:47

标签: java android handler countdowntimer timertask

我有一个要求,我需要创建一个计时器任务,该任务每10秒执行一次。有一个重置Button,单击该重置Button后,我想将时间从10秒重置为30秒。现在在执行功能30秒后,我需要将计时器重新设置为10秒。我尝试使用HandlerTimerTaskCountDownTimer,但无法达到要求。谁能建议我解决这个问题的最佳方法

// OnCreate of Activity
if (timerInstance == null) {
            timerInstance = Timer()
            timerInstance?.schedule(createTimerTask(), 10000L, 10000L)
}

private fun createTimerTask(): TimerTask {
        return object : TimerTask() {
            override fun run() {
                Log.d("TimerTask", "Executed")
                //presenter?.onCountdownTimerFinished(adapter.activeCallList, adapter.previousPosition)
            }
        }
}

//On Reset Button Click
timerInstance?.cancel()
timerInstance = Timer()
timerInstance?.schedule(createTimerTask(), 30000L, 30000L)

1 个答案:

答案 0 :(得分:1)

按下按钮后,您可以取消提交的TimerTask并以30秒的延迟和10秒的时间重新安排时间? https://docs.oracle.com/javase/8/docs/api/java/util/Timer.html#scheduleAtFixedRate-java.util.TimerTask-long-long-

  1. 通过调用.cancel取消第一个提交的任务。
  2. 在按钮上按时间表使用30000L,10000L作为延迟和期限

示例代码:

package so20190423;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class TimerTest {

    public static void main(String[] args) {
        System.out.println(new Date());
        Timer timer = new Timer();
        TimerTask task = newTask();
        timer.scheduleAtFixedRate(task, 10000L, 10000L);
        task.cancel();
        timer.scheduleAtFixedRate( newTask(), 30000L, 10000L);
    }

    protected static TimerTask newTask() {
        return new TimerTask() {

            @Override
            public void run() {
                System.out.println("YO");
                System.out.println(new Date());
            }
        };
    }

}

HTH!