首页 > 解决方案 > 为什么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();

标签: javaandroid

解决方案


推荐阅读