为什么Android倒数计时器运行超过零

时间:2018-12-23 05:51:56

标签: java android

我有一个倒数计时器,可以开始倒计时当前日期和时间与未来日期和时间之间的小时,分​​钟和秒。

问题是我在倒计时计时器中遇到了一种行为,该行为在00:00:00以后一直运行。除此之外,倒数计时器还可以正常工作,但我不确定为什么它继续运行到00:00:-1、00:00:-2、00:00:-3 ...

我添加了一个if条件,该条件一旦时间等于“ 00:00:00”就取消了计时器,这可以解决问题,但我仍然想知道为什么会遇到此问题。我很确定这是不正常的,因为我已经看到倒数计时器教程会在到达0时停止,而无需添加其他逻辑。有什么我想念的吗?

    java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("dd.MM.yyyy, HH:mm:ss");
    formatter.setLenient(false);

    String endTime = "23.12.2018, 01:35:00";
    Date startDate;
    Date endDate;
    long endTimeMilli = 0;

    try {
        endDate = formatter.parse(endTime);
        endTimeMilli = endDate.getTime();

    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    startDate = new Date();
    startTime = startDate.getTime();

    if(startTime >= endTimeMilli)
        return;

    mCountDownTimer = new CountDownTimer(endTimeMilli, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {


            startTime -= 1;
            long serverUptimeSeconds =
                    (millisUntilFinished - startTime) / 1000;

            int hoursLeft = (int) serverUptimeSeconds / 3600;
            int minutesLeft = (int) serverUptimeSeconds  % 3600 / 60;
            int secondsLeft = (int) serverUptimeSeconds % 3600 % 60;

            String timeLeftFormatted = String.format(Locale.getDefault(), "%02d:%02d:%02d", hoursLeft, minutesLeft, secondsLeft);
            mCountdown.setText(timeLeftFormatted);

            if(mCountdown.getText().toString().equals("00:00:00"))
                mCountDownTimer.cancel();
        }

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

0 个答案:

没有答案