Java / Android的CountDownTimer结果不准确

时间:2012-07-28 03:46:59

标签: java android countdowntimer

我目前有一个简单的计时器活动,用户可以选择开始时间,我使用CountDownTimer类从指定的开始时间倒计数到0。还有一些额外的处理来将屏幕上剩余的时间格式化为我想要的方式,这是我得到不准确结果的地方。我发现这种额外的处理可能导致7到50毫秒之间的延迟。

CountDownTimer类的工作方式如下:指定总时间(以毫秒为单位)和间隔时间(1000毫秒,或每秒1个刻度)。每次打勾,屏幕都会反映出已经过了一秒钟。但是,这种处理可能需要一些额外的时间,这意味着如果您希望它每1000毫秒达到一次,那么某些滴答可能会“错过”。

所以,我知道我的问题是我有一些过程需要花费一些时间(这不是一个恒定的时间......从几次测试运行的范围是7-50ms) 。我不确定如何解决这个问题。

我的快速,不正确的修复方法如下......我为每个标记设置了一个阈值(因此,自上次标记后的1050到950毫秒之间)。这不是一个好方法,因为它没有捕获每个滴答声......它只是捕获更多滴答。我可以使用一些帮助来提供更灵活的解决方案。

我的代码:

public void onTick(long millisUntilFinished) {

      System.out.println(millisUntilFinished); //Keeping track of change in MS
      String message2, message3;
      if (millisUntilFinished >= 1000) { //Still more than 1 sec remaining

          //The following if statement sees if the tick falls into the threshold
          if (millisUntilFinished % 1000 < 50 || millisUntilFinished > 950) {

              //format logic below
              if (S == 0) {
                  S = 59;
                  if (M == 0 && H > 0) {
                      M = 59;
                      H--;
                  } else {
                      M--;
                  }

              } else {
                  S--;
              }
          }
      } else {
          //Less than 1 sec remaining
          try {
              //Sleep for the remaining amount of time left... Then end the timer.
              Thread.sleep(1000 - millisUntilFinished);
              S--;
          } catch (InterruptedException ie) {

          }
      }

0 个答案:

没有答案