Каков наилучший метод таймера для точных интервалов в одну секунду? - PullRequest
4 голосов
/ 02 октября 2011

Я пишу простое приложение для хронометража для специализированного спорта на открытом воздухе. Приложение выполняет серию вычислений каждую секунду и отображает информацию, представляющую интерес для пользователя. Прошедшее время является ключом к точности рассчитанных результатов. В идеале расчет и результаты будут обновляться ровно каждую секунду. Я пытался использовать таймер или виджет хронометра для управления интервалом обновления:

Есть ли более точный способ установить интервал? Есть ли метод, который даст мне почти точный интервал в одну секунду?

Приведенный ниже код не является полным - просто попытка показать тип используемого времени и хронометра - они работают нормально, они просто не точны.

import java.util.Timer ;
import java.util.TimerTask;
...
myTimer = new Timer();
myTimer.schedule(new TimerTask() {
public void run() {
...
TimerMethod();
}
}, 0, 1000);
... 
private void TimerMethod()
{
this.runOnUiThread(Timer_Tick);
}
...
private Runnable Timer_Tick = new Runnable() {
public void run() {
blah blah
}

///////////////////////////////

import android.widget.Chronometer;
...
final Chronometer myChronometer = (Chronometer)findViewById(R.id.chronometer);
final TextView keyBox = (TextView)findViewById(R.id.keyBox);
...      
myChronometer.start();
...   
myChronometer.setOnChronometerTickListener(
new Chronometer.OnChronometerTickListener(){
...
public void onChronometerTick(Chronometer myChronometer) {
blah blah             
}

1 Ответ

7 голосов
/ 02 октября 2011

Вы смотрели на scheduleAtFixedRate метод класса java.util.Timer?

Согласно Javadoc, «При выполнении с фиксированной скоростью каждое выполнение планируется относительно запланированного времени выполнения первоначального выполнения. Если выполнение задерживается по какой-либо причине (например, при сборке мусора или другой фоновой активности), два или более выполнения будут выполняться в быстрой последовательности «наверстать упущенное». В долгосрочной перспективе частота выполнения будет точно равна обратной величине указанного периода (при условии, что системные часы, лежащие в основе Object.wait (long), точны). "

...