Я застрял, пытаясь заставить свой таймер работать, где я сделаю один обратный отсчет, затем вернусь и сделаю другой.
Итак, при втором вызове timer.scheduleAtFixedRate
я получаю IllegalStateException
, но я отменяю TimerTask
, а не Timer
.
Что я хочу сделать, так это отсчитать двадцать секунд, затем десять секунд, а затем повторить, каждый раз обновляя текстовое поле, чтобы информировать пользователя о том, что ему следует делать.
Одна из проблем заключается в том, что обратный отсчет идет быстрее, чем раз в секунду.
04-22 01:34:57.118: DEBUG/TestHandler1(404): message called:2:null
04-22 01:34:57.709: DEBUG/TestHandler1(404): message called:3:null
04-22 01:34:57.899: DEBUG/TestHandler1(404): message called:4:null
04-22 01:34:58.198: DEBUG/TestHandler1(404): message called:5:null
Вот мое исключение:
04-22 01:35:48.529: ERROR/AndroidRuntime(404): java.lang.IllegalStateException: TimerTask is scheduled already
04-22 01:35:48.529: ERROR/AndroidRuntime(404): at java.util.Timer.scheduleImpl(Timer.java:574)
04-22 01:35:48.529: ERROR/AndroidRuntime(404): at java.util.Timer.scheduleAtFixedRate(Timer.java:530)
Вот код, который я использовал для этой попытки. Когда я пытался использовать разные таймерные задачи для каждого цикла, это было еще хуже, так как я поставил блок new TimerTask
непосредственно перед timer.scheduleAtFixedRate
, поэтому я вернулся к этой версии.
handler = new Handler() {
public void handleMessage(Message msg) {
counterText.setText((new Date()).toString() + " "
+ Integer.toString(cntr));
System.out.println("handleMessage");
}
};
timertask = new TimerTask() {
public void run() {
handler.sendEmptyMessage(0);
cntr++;
if (cntr > maxReps) {
timertask.cancel();
cntr = 0;
}
}
};
doneButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
cntr = 0;
for (MyClass mclass : input.getLoop()) {
labelText.setText(mclass.getName());
for (int y = 0; y < 8; y++) {
maxReps = 20;
timer.scheduleAtFixedRate(timertask, 0, 1000);
maxReps = 10;
labelText.setText("Rest");
timer.scheduleAtFixedRate(timertask, 0, 1000);
}
}
}
});
Надеюсь, кто-то может указать на простую ошибку, которую я сделал.
Выше приведен фрагмент моего кода из Activity
, поэтому я включаю только то, что, по моему мнению, необходимо, чтобы показать, где у меня возникла проблема.