我有一个要求,我需要创建一个计时器任务,该任务每10秒执行一次。有一个重置Button
,单击该重置Button
后,我想将时间从10秒重置为30秒。现在在执行功能30秒后,我需要将计时器重新设置为10秒。我尝试使用Handler
,TimerTask
和CountDownTimer
,但无法达到要求。谁能建议我解决这个问题的最佳方法
// 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)
答案 0 :(得分:1)
按下按钮后,您可以取消提交的TimerTask
并以30秒的延迟和10秒的时间重新安排时间?
https://docs.oracle.com/javase/8/docs/api/java/util/Timer.html#scheduleAtFixedRate-java.util.TimerTask-long-long-
示例代码:
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!