【问题标题】:How to check times in milliseconds in android如何在android中以毫秒为单位检查时间
【发布时间】:2020-03-30 19:33:47
【问题描述】:

我有一个工作正常的毫秒计时器。 按钮代码:

btnStart.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view){
            startTime = SystemClock.uptimeMillis();

                customHandler.postDelayed(updateTimerThread,0);
                txtCheck.setText("");
            }
        });

可运行:

 Runnable updateTimerThread = new Runnable() {
    @Override
    public void run() {
    timeMilliSeconds = SystemClock.uptimeMillis()-startTime;
    updateTime = timeSwapBuff+timeMilliSeconds;
    secs = (int)(updateTime/1000);
    mins = (int)(secs/60);
    secs %=60;
    milliseconds = (int)(updateTime%1000);
    txtChrono.setText(""+mins+":"+String.format("%2d",secs)+":"
                                +String.format("%3d",milliseconds));
    customHandler.postDelayed(this,0);
      check(secs, milliseconds)  
    }
};

检查时间是否匹配的功能:

 public void check(Integer secs, long milli){
    if (secs.equals(45) && milli.equals(367)){
        txtCheck.setText("done");
    }
}

我需要检查时间才能开始活动。我必须检查的时间是 seconds.milliseconds(即 45.367),但是这个功能(检查)不起作用。 有什么想法吗?

“检查”功能有效……但只有五分之一:刷新时间可能太短? 另外,代码在一个片段中:它对定时器有影响吗?

【问题讨论】:

  • 它不起作用是什么意思?预期的结果是什么,你得到了什么?为什么要使用延迟为 0 的 .postDelayed 方法?此外,您可能应该更好地格式化您的代码以提高可读性。
  • 原始数据类型没有等式方法。您应该使用“==”或用Long.parseLong(); 包装它并且Runnable 不是线程,它是可以由线程执行的任务。
  • @nulldroid。我已经更改了代码以使其更清晰(?)。我不知道为什么我使用 .postDelayed 延迟为 0(我从教程中复制了代码)并且计时器工作正常。
  • @LinuxServer。与您的建议结果相同。
  • 你可以尝试 kotlin 的“compareTo”。这可能会解决问题。

标签: java android milliseconds chronometer


【解决方案1】:

您的计算时间可能超过 1 毫秒。你不应该经常检查。它很贵而且不安全。 为什么不使用CountdownTimer?它完成了这项工作,并且基于毫秒。

 private long[] checkTimes = new long[]{ 45367L,90446L,25384L}; 
 for (int i = 0; i < checkTimes.length; i++) {
    new CountDownTimer(checkTimes[i], 1000) {

         public void onTick(long millisUntilFinished) {
             txtCheck.setText("seconds remaining: " + millisUntilFinished / 1000);
         }

         public void onFinish() {
             txtCheck.setText("done");
         }
      }.start();
 }

【讨论】:

  • 它有效。你能帮我做n次吗?我的意思是我需要添加一个函数来重复几次(不同的长度)。
  • 添加了一个简单的 for 循环。
【解决方案2】:

你需要这样做才能得到毫秒:

   long time = System.currentTimeMillis();

【讨论】:

  • System.currentTimeMillis 和 System.upTimeMillis 有什么区别?我应该计算 45 秒和 367 毫秒还是直接计算 45367 毫秒?
【解决方案3】:

您是否考虑过使用此处所述的 Android Instant 类? https://developer.android.com/reference/kotlin/java/time/Instant

在从事与您相同类型的工作时,这对我帮助很大。

【讨论】:

  • 你知道那个类的例子吗?
猜你喜欢
  • 2018-03-07
  • 1970-01-01
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-11
相关资源
最近更新 更多