counter.Cancel (); не выполняется в OnStop (); метод - PullRequest
2 голосов
/ 04 мая 2020

У меня есть CounterTimer, который запускается, когда API успешен. если пользователь нажимает KeyEvent.KEYCODE_HOME CounterTimer должен отменить, но вместо отмены он продолжает работать

Так я запускаю счетчик

private void countDownStart(String event_date_time) {

        String[] tokens = event_date_time.split(":");
        int secondsToMs = Integer.parseInt(tokens[2]) * 1000;
        int minutesToMs = Integer.parseInt(tokens[1]) * 60000;
        int hoursToMs = Integer.parseInt(tokens[0]) * 3600000;
        long total = secondsToMs + minutesToMs + hoursToMs;

        timer = new CountDownTimer(total, 1000) {
            public void onTick(long millisUntilFinished) {
                int seconds = (int) (millisUntilFinished / 1000) % 60;
                int minutes = (int) ((millisUntilFinished / (1000 * 60)) % 60);
                int hours = (int) ((millisUntilFinished / (1000 * 60 * 60)) % 24);
                CountDown.setVisibility(View.VISIBLE);
                CountDown.setText(String.format("%02d:%02d:%02d", hours, minutes, seconds));
            }

            public void onFinish() {

                CountDown.setVisibility(View.VISIBLE);
                CountDown.setText("00:00:00");
                loader.showProgressBar();
                startActivity(new Intent(mContext, Questions.class));

            }
        };
        timer.start();

    }

и это то, что я использовал, чтобы отменить. Я пробовал и с onStop, и с KeyEvent.KEYCODE_HOME

 @Override
    protected void onStop() {
        System.out.println("count: onStop Called");
        loader.hideProgressBar();
        if (timer != null) {
            timer.cancel();

        }
        super.onStop();
    }

  @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_HOME)) {
            loader.hideProgressBar();
            System.out.println("KEYCODE_HOME");
            if (timer != null) {
                timer.cancel();
            }
            return true;
        }
        return false;
    }

Что здесь может быть не так?

...