当计时器当前正在运行时,如何更改Timer
间隔?
我到目前为止尝试的方法是:
for (Thread thread : Thread.getAllStackTraces().keySet()) {
if (thread.getName().length() > 10) {
if (thread.getName().substring(0, 11).equals("TimerActive")) {
thread.interrupt();
if (thread.isInterrupted())
Log.d("Timer interrupted");
else
Log.d("Timer not interrupted");
}
}
}
我尝试找到当前活动的线程并停止那些作为计时器的线程,然后使用新的间隔创建另一个计时器。但由于某种原因,interrupt()
方法不起作用,因为我得到“Timer not interrupted”日志。在这种情况下,我将有两个不同时间间隔的运行计时器。
我尝试的第二种方法是将计时器存储在ArrayList
中,并在我想要更改间隔时取消并重新创建它们,但是在这种情况下我收到一条错误,表示我无法访问计时器被取消了
答案 0 :(得分:0)
每秒打印“滴答”,但每两秒更改一次。
public class Y {
public static void main(String[] args)throws Exception {
Timer timer = new Timer();
Action task = new Action();
timer.schedule( task, 2000, 1000 );
Thread.sleep( 4000 );
// this is where the user request a new interval, 2 sec.
task.cancel();
timer.schedule( new Action(), new Date(task.last + 2000), 2000 );
Thread.sleep( 8000 );
task.cancel();
}
}
class Action extends TimerTask {
private long last;
public void run(){
last = scheduledExecutionTime();
System.out.println( "tick" );
}
public long getLast(){
return last;
}
}
可能会有一些漂移。