CountDownTimer 奇怪的行为

CountDownTimer strange behaviour

大家好,提前致谢!,

我有一个 CountDownTimer,当我显示从 1 到给定数字的递增计数时,我想暂停一下,有一个间隔。问题是,使用下面的代码,计数器有时会达到 29,但有时只有 28,我不知道为什么。

有人能帮帮我吗?

    public void CountDown(View v)
{
    int FinishNumber = 30;

    final CountDownTimer CountDown = new CountDownTimer(FinishNumber * 100, 100)
    {
        int NumberToShow = 1;

        public void onTick(long millisUntilFinished)
        {
            CopyrightTV.setText(String.valueOf(NumberToShow++));
        }

        public void onFinish()
        {
            CopyrightTV.setText(String.valueOf(NumberToShow));
            this.cancel();
        }
    }
            .start();
}

这并不是什么奇怪的行为 - 考虑到第一个 onTick(long millisUntilFinished) 仅在 100 毫秒(即您设置的间隔)之后调用,而不是在您启动 CountDownTimer 时调用。

其次,CountDownTimer 不是 100% 精确的计时器,所以你可以期待这个 "strange behaviour"。

编辑

如果精度不是特别重要,你可以尝试将 CountDownTimer 增加几百毫秒,像这样:

  public void CountDown(final TextView v)
  {
    final int FinishNumber = 30;

    final CountDownTimer CountDown = new CountDownTimer((FinishNumber + 4)  * 100, 100)
    {
        int NumberToShow = 1;

        public void onTick(long millisUntilFinished)
        {
            if (NumberToShow < FinishNumber)
                v.setText(String.valueOf(NumberToShow++));
        }

        public void onFinish()
        {
            if (NumberToShow < FinishNumber)
                v.setText(String.valueOf(NumberToShow));
        }
    }
        .start();
}