Я делаю приложение, которое отображает различные позы йоги в течение 60 секунд. Я рвал на себе волосы, пытаясь заставить таймер обратного отсчета работать так, как я хочу. Мне нужно, чтобы таймер мог приостанавливаться и автоматически перезапускаться через 15 секунд. CountDownTimer из Android не работал, потому что у него не было паузы. Я попробовал 2 разные версии переписанных Android CountDownTimers и классическую версию (Android CountDownTimer), и все они, похоже, имеют одну и ту же ошибку, потому что они используют обработчики.
Я пробовал эту версию: http://www.java2s.com/Open-Source/Android/Timer/multitimer-android/com/cycleindex/multitimer/CountDownTimerWithPause.java.htm
Я пробовал эту версию: Android: CountDownTimer пропускает последний onTick()! — я добавил к нему метод onFinish.
Я пытаюсь выполнить Thread.sleep в методе onFinish в течение 15 секунд, и он не обновляет пользовательский интерфейс за последнюю секунду перед переходом в режим Thread.sleep. В следующем коде TextView не обновляется, чтобы установить пустую строку, пока не будет выполнен вызов Thread.sleep.
cdt = new CountDownTimerWithPause(60000,1000,true) {
@Override
public void onTick(long millisUntiFinished) {
tvClock.setText("Remaining:" + millisUntiFinished/1000);
}
@Override
public void onFinish() {
tvClock.setText("");
bell.start();
if (bAutoPlayIsOn) {
tvClock.setText("waiting for next pose...");
try {
//15 second pauses between poses
Thread.sleep(15000);
//start over
listener.onForwardItemSelected();
ResetClocktoMaxTime(60000);
resume();
} catch (InterruptedException e) {
Log.d("Sleep Interrupted", e.toString());
e.printStackTrace();
}
catch (Exception e) {
Log.d("Timer", e.toString());
}
}
else {
tvClock.setText("Done");
btnStart.setText("Start ");
bClockIsTicking = false;
btnStart.setCompoundDrawablesWithIntrinsicBounds(null, playBtn, null, null);
}
}
};
У кого-нибудь есть идеи, как это сделать (перезапустить через 15 секунд) по-другому?