Если вы уже отменили один таймер, вы не можете перезапустить его, вам придется создать новый.
Смотрите этот ответ , он содержит видео и исходный код, как я сделал нечто подобное.
В основном есть два метода: pause
и resume
В паузе:
public void pause() {
this.timer.cancel();
}
В резюме:
public void resume() {
this.timer = new Timer();
this.timer.schedule( aTask, 0, 1000 );
}
Это создает ощущение паузы / возобновления.
Если ваши таймеры выполняют разные действияв зависимости от состояния приложения вы можете рассмотреть возможность использования StatePattern
Fist для определения абстрактного состояния:
abstract class TaskState {
public void run();
public TaskState next();
}
и предоставления столько состояний, сколько вам нужно.Ключ в том, что одно государство ведет вас к другому.
class InitialState extends TaskState {
public void run() {
System.out.println( "starting...");
}
public TaskState next() {
return new FinalState();
}
}
class FinalState extends TaskState {
public void run() {
System.out.println("Finishing...");
}
public TaskState next(){
return new InitialState();
}
}
И затем вы меняете состояние в вашем таймере.
Timer timer = new Timer();
TaskState state = new InitialState();
timer.schedule( new TimerTask() {
public void run() {
this.state.run();
if( shouldChangeState() ) {
this.state = this.state.next();
}
}
}, 0, 1000 );
Наконец, если вам нужно выполнить одно и то же, но с разной скоростью, вы можете рассмотреть возможность использования Сроки .Это немного сложнее, но давайте делать крутые анимации, позволяя рисовать определенные компоненты с различной скоростью (вместо того, чтобы быть линейными)