Таймер обратного отсчета показывает половину времени тоста - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь реализовать что-то вроде таймера обратного отсчета, который выводит сообщение на половину выбранных минут. Например, если я установил 6 минут, когда таймер обратного отсчета достигнет 3 минут, он отображает тост, а затем продолжает тикать.

он не работает

Я задавал этот вопрос в другой раз, но я попросили уточнить мой вопрос, поэтому я надеюсь, что это будет go.

 // 6 min =360,000 millisecond
final long millis=360000;

new CountDownTimer(millis,1000) {
    @Override
    public void onTick(long millisUntilFinished) {
        long halftime =millis/2;
        if (millisUntilFinished == halftime){
            Toast.makeText(CommentJouerActivity.this, "Halftime sir", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onFinish() {}
}.start();

1 Ответ

0 голосов
/ 20 апреля 2020

Хммм. Я думаю, что недавно столкнулся с подобной проблемой. Вы устанавливаете частоту тиков на 1 секунду == 1000 миллисекунд, но я думаю, что метод onTick () может иметь минимальный временной сдвиг (например, 1 или 2 миллисекунды на тик). Из-за этого вы можете пропустить тайм-аут на несколько миллисекунд.

У меня есть несколько идей для вас.

1) Вы можете рассчитать полупериод раньше, поэтому он не рассчитывается на каждый тик. И удалите его из тела onTick ().

final long millis=360000;
long halftime =millis/2;

2) Вы можете проверить половину времени с некоторым запасом, например, половинное время:

if (millisUntilFinished + 500 > halftime && millisUntilFinished - 500 < halftime) {
    Toast.makeText(CommentJouerActivity.this, "Halftime sir", Toast.LENGTH_SHORT).show();
}
...