Как приостановить CountDownTimer? - PullRequest
0 голосов
/ 01 марта 2019

Я бы хотел приостановить таймер обратного отсчета в определенных условиях.Но в моем коде, когда он запускается, он никогда не останавливается, даже если mIntheGym имеет значение false.Пожалуйста, помогите мне в этом вопросе.Заранее спасибо.

Вот мой код ниже.

    TimerTask doAsynchronousTask1 = new TimerTask() {
        @Override
        public void run() {
            handler1.post(new Runnable() {
                public void run() {
                    try {
                        if (mIntheGym) {
                            mtextview.setText("counter starts");
                            mCountDownTimer1 = new CountDownTimer(mTimeLeftInMillis1, 500) {
                                @Override
                                public void onTick(long millisUntilFinished) {
                                    mTimeLeftInMillis1 = millisUntilFinished;
                                    updateCountDownText();
                                }

                                @Override
                                public void onFinish() {
                                }
                            }.start();
                        }
                        else {
                            mtextview.setText("stop counter");
                            if (mCountDownTimer1 != null) {
                                mCountDownTimer1.cancel();
                            }
                        }
                    } catch (Exception e) {
                    }
                }
            });
        }
    };

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Из описания ваш логический код неверен.Вам нужно изменить его, если вы хотите приостановить / остановить CountDownTimer.

TimerTask doAsynchronousTask1 = new TimerTask() {
    @Override
    public void run() {
        handler1.post(new Runnable() {
            public void run() {
                try {
                    mCountDownTimer1 = new CountDownTimer(mTimeLeftInMillis1, 500) {
                        boolean started = false;

                        @Override
                        public void onTick(long millisUntilFinished) {
                            if (mIntheGym) {
                                if (!started) {
                                    mtextview.setText("counter starts");
                                    started = true;
                                }

                                mTimeLeftInMillis1 = millisUntilFinished;
                                updateCountDownText();
                            } else {
                                mtextview.setText("stop counter");
                                if (mCountDownTimer1 != null) {
                                    mCountDownTimer1.cancel();
                                }
                            }
                        }

                        @Override
                        public void onFinish() {
                        }
                    }.start();
                } catch (Exception e) {
                }
            }
        });
    }
};
0 голосов
/ 01 марта 2019

Вы не можете приостановить TimerTask.Как только он отменен, вы не можете запустить его снова.

Вы можете посмотреть здесь для получения дополнительной информации: Отменить задачу TimerTask

Надеюсь, это поможет!

...