定时器完成时视图出现问题

时间:2011-03-20 12:44:36

标签: android

我使用以下代码:

public class CountDown extends CountDownTimer {

        public CountDown(long millisInFuture) {
            super(millisInFuture, 1000); 
        }

        public void onFinish() {

        }

        public void onTick(long millisUntilFinished) {

            Integer milisec = new Integer(new Double(millisUntilFinished)
                    .intValue());
            Integer cd_secs = milisec / 1000;
            Integer hours = cd_secs / 3600;
            Integer minutes = (cd_secs % 3600) / 60;
            Integer seconds = (cd_secs % 3600) % 60;
            timerText.setText(String.format("%02d", hours) + ":"
                    + String.format("%02d", minutes) + ":"
                    + String.format("%02d", seconds));
            long timeLeft = millisUntilFinished / 1000;
        }
    }

我在同一个屏幕上显示多个计时器。

我面临的问题是,当计时器完成其持续时间时,计时器显示为“00:00:01”

由于多个定时器(考虑3个定时器)以不同的持续时间运行,我无法在onFinish()上进行硬编码,因为在硬编码时我收到错误,因为其他定时器在其中一个定时器完成时仍在运行

public void onFinish() {
            secText.setText("00");
}

请提供您的意见。

源代码是否有任何问题,为什么它不会改为“00:00:00”&定时器完成后停止到“00:00:01”?

提前致谢。

温暖的问候,

CB

1 个答案:

答案 0 :(得分:0)

为什么使用Integer和Double?这些是自动装箱的值,因此速度较慢。另外你为什么要使用

Integer milisec = new Integer(new Double(millisUntilFinished).intValue());

何时

int milisec = (int) millisUntilFinished;

应该做同样的事情。还

int cd_secs = milisec / 1000;
int hours = cd_secs / 3600;
int minutes = (cd_secs % 3600) / 60;
int seconds = (cd_secs % 3600) % 60;

应该做同样的事情

修改

问题很可能是你在调用父构造函数时设置的间隔太高。尝试super(millisInFuture, 100)应该更可靠地工作。