проблема с реализацией секундомера в handler
Имеется проблема, с Handler.
private void startTimer() {
cancelTimer();
handler = new Handler();
final MovementMethod movementMethod = new ScrollingMovementMethod();
handler.postDelayed(timer = new Runnable() {
@Override
public void run() {
if (lastSensorValues != null && Bt_On == true) {
series.appendData(new DataPoint(xLastValue,AnalogData), true, tch);
}
xLastValue+=DELAY_TIMER;
time+=DELAY_TIMER;
handler.postDelayed(this, DELAY_TIMER);
}
}, DELAY_TIMER);
}
private void cancelTimer() {
if (handler != null) {
handler.removeCallbacks(timer);
}
}
Вот код. Если в качестве параметра DELAY_TIMER установить значение 1000 или 100, то таймер работает плюс минус нормально, однако если установить DELAY_TIMER на 1-100(мне желательно 3), то случается какая-то фигня, и время начинает протекать иначе (переменная time к примеру не будет увеличиваться на 1000 миллисекунд каждую секунду). МОжете подсказать пожалуйста в чем тут может быть проблема? Заранее спасибо.
Ответы (2 шт):
handler.postDelayed предназначено для задержки выполнения какого-либо кода.
Используйте следующий код таймера
Timer timer_main = new Timer();
timer_main.schedule(new UpdateTimeTask_Receiver(), 0, 500);
//
public class UpdateTimeTask_Receiver extends TimerTask {
public void run() {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
// UI
}
});
}
}
Возможно я не прав но для таких вещей существуют потоки.
long wait = 5; //5s
new Thread(new Runnable() {
public void run() {
long alreadyWait = 0;
while(alreadyWait < wait) {
try {
Thread.sleep(1000); //ждём секунду
alreadyWait++;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//make Handler
System.out.println("Отчёт времени закончен");
}
}).start();
В таком случае создается отдельный поток, который можна приспать на секунду и не тормозить при этом всю программу.