Миллисекунды в таймере android
Я недавно начал разбираться с таймером в android. У меня есть вот такой код, но мне нужно, чтобы миллисекунды доходили до 60, а не до 10 (и при этом не было рассинхрона с реальным временем, именно это у меня не получалось) подскажите пожалуйста, как мне это сделать?
private void startTimer() {
timer = new Timer();
btnStart.setText(R.string.btn_stop);
running = true;
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runTimer();
}
}, 0, 100);
}
private void runTimer() {
this.runOnUiThread(timerTick);
}
private void updateMs() {
ms++;
if (ms == 10) {
updateSeconds();
}
}
private void updateSeconds() {
ms = 0;
seconds++;
if (seconds == 60) {
seconds = 0;
minutes++;
}
if (minutes == 60) {
updateHor();
}
}
private void updateHor() {
minutes = 0;
hourse++;
if (hourse == 60) {
ms = 0;
minutes = 0;
hourse = 0;
}
}
private void updateTimerText() {
timerText.setText(String.format(Locale.getDefault(), "%01d:%02d:%02d:%02d", hourse, minutes, seconds, ms));
}
private Runnable timerTick = new Runnable() {
@Override
public void run() {
updateTimerText();
updateMs();
}
};
Ответы (1 шт):
Если вы хотите вообще без рассинхрона - то не получится(по крайней мере я не знаю простых способов)
Почему? Ну например, есть поток А(спящий) и ещё 10 потоков. Вот поток А подождал нужное для вас время(10 мс или нет - не важно). Дальше он проснулся, но не факт, что он сразу же начнёт своё выполнение. Планировщик может отдать следующие такты процессора другим потокам из 10и.
И когда А продолжит своё выполнение, в действительности пройдёт больше чем 10мс