У меня проблема в Android Studio с созданием таймера

В приложении я снова открываю ту же активность, в которой находится таймер. Первый раз таймер работает, но после этого он начинает глючить в Runs onFinish() в случайное время. Как я могу это исправить?

new CountDownTimer(10000, 1000) {
    public void onTick(long millisUntilFinished) {
        textQuestion.setText("seconds remaining: " + millisUntilFinished / 1000);
    }
    public void onFinish() {
        wrongAnswer();
    }
}.start();

Это невозможно, ваш onFinish будет вызван через 10 секунд после запуска таймера.

Suraj Vaishnav 16.03.2019 15:40

Попробуйте с ведением журнала значения millisUntilFinished внутри onTick

Suraj Vaishnav 16.03.2019 15:47
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны хранить CountDownTimer в таймере и отменять его при переходе к другому действию или фрагменту;

Создать CountDownTimer как глобальную переменную (выше onCreate)

CountDownTimer timer;

Инициализируйте таймер там, где вы хотите запустить таймер или когда угодно

timer = new CountDownTimer(10000, 1000) {

        public void onTick(long millisUntilFinished) {
            textQuestion.setText("seconds remaining: " + millisUntilFinished / 1000);
        }

        public void onFinish() {
            wrongAnswer();
        }
    }.start();

И в onDestroy отменить его

@Override
protected void onDestroy() {
    if (timer != null) timer.cancel();
    super.onDestroy();
}

Он показывает, что метод переопределения должен вызывать super.OnDestroy().

Niki Georgiev 16.03.2019 16:06

Другие вопросы по теме