2010-12-01 3 views
0

Как использовать CountDownTimer для Android?Как использовать CountDownTimer для Android?

Я в принципе хочу иметь следующий сценарий:

boolean 3_s_passed = false; 
// setup counter to change 3_s_passed=true when it finishes 
counter.start(); 
while(true){ 

if(3_s_passed || user_is_Done) break; 
// do some stuff which may set user_is_Done to true 

} 

Так либо 3 секунд прошли или отделку пользователя, и я из петли. Будет ли код while-loop работать до завершения счетчика? Правильно ли я понимаю значение CountDownTimer?

Спасибо за вашу помощь

ответ

0

Для этого вы можете использовать обработчик. Сделайте Runnable с заданием выполнить через 3 секунды или когда пользователь выполнит задачу. Отправьте его на 3 секунды и удалите обратные вызовы, если пользователь делает что угодно. Код же ниже показано, как правильно использовать Handler но не зацикливание, чтобы позволить пользователю сделать действие вы должны понять, что по своему усмотрению :)

Runnable action = new Runnable(){ 

    public void run(){ 
     //... 
    } 
}; 

mHandler.postDelayed(action, 3000); 
if(userDone){ 
    mHandler.removeCallbacks(action); 
    mHandler.post(action); 
} 
+0

Хм. Если я правильно понимаю это, mHandler добавляет действие в очередь сообщений через 3 с. Однако, если userDone, mHandler отменяет этот запрос действия и сообщает Android, чтобы добавить действие в очередь сообщений сейчас. Это верно? Также интересно ли, если userDone = true, будет ли действие гарантировано выполняться перед кодом после if-statement? Идея очереди всегда беспокоит меня ошибками времени и условиями гонки. – f20k 2010-12-01 22:01:16

0

Не использовать этот класс он содержит расу в методе отмены. https://code.google.com/p/android/issues/detail?id=58668

Отмена не работает в случае гонки между по -Tick и отмена.

Лучше реализовать его с нуля без гонок. В других случаях у вас возникнут проблемы до официального исправления.

Смежные вопросы