Как проверить время в миллисекундах в android - PullRequest
0 голосов
/ 30 марта 2020

У меня есть миллисекундный хронометр, который работает нормально. Код кнопки:

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

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

Runnable:

 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");
    }
}

Мне нужно проверить время, чтобы начать событие. Время, которое я должен проверить, указано в секундах. Миллисекундах (т.е. 45,367), но эта функция (проверка) не работает. Есть идеи?

Функция проверки работает ... но только 1 раз из пяти: может быть, время обновления слишком мало? Кроме того, код находится во фрагменте: имеет ли он какое-либо влияние на таймер?

Ответы [ 3 ]

1 голос
/ 30 марта 2020

Вам нужно сделать это, чтобы получить в миллисекундах:

   long time = System.currentTimeMillis();
1 голос
/ 31 марта 2020

Вполне вероятно, что ваши расчеты занимают более 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();
 }
0 голосов
/ 30 марта 2020

Рассматривали ли вы использование класса Android Instant, как описано здесь? https://developer.android.com/reference/kotlin/java/time/Instant

Это очень помогло мне, когда я выполняю ту же работу, что и вы.

...