Как мне использовать Android CountDownTimer? - PullRequest
0 голосов
/ 01 декабря 2010

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

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

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 до завершения работы счетчика?Верно ли мое понимание CountDownTimer?

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

Ответы [ 2 ]

0 голосов
/ 03 декабря 2013

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

отмена не работает в случае гонки между onTick и отменой.

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

0 голосов
/ 02 декабря 2010

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

Runnable action = new Runnable(){

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

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