Хотите остановить увеличение миллисекунд
Я пытаюсь создать приложение таймера, но у меня есть эта проблема с миллисекундами.
Когда кто-то активирует таймер, я сохраняю текущие миллисекунды, а затем просто получаю разницу между ними.
long startMillisecond;
long i = System.currentMillisecond() - startMillisecond
а затем я отображаю эту переменную i
с некоторым другим кодом. Однако, когда я приостанавливаю свою программу, моя переменная i
остается на правильном значении, но когда я снова запускаю программу, я получаю "неправильное" значение, так как System.currentMillisecond()
продолжает расти (внутренне), так что похоже, что он "прыгает" в течение пары секунд
Пример: Запустить приложение> переменная i = System.currentMillisecond() - startMillisecond
равно 0. И теперь, если я сделаю паузу на 5 секунд, а затем возобновлю свою переменную i
имеют значение 5.
Кто-нибудь знает, как я могу сделать так, чтобы он был на том же значении, когда я делаю паузу?
РЕДАКТИРОВАТЬ. Вот мой код для моей функции запуска
String tempstring;
int millisec,sec,min,hour;
Handler handler;
Runnable runnable;
SensorManager mSensor;
Sensor accSensor;
Button startButton,stopButton,resetButton;
TextView whiteplayertime,blackplayertime,xt,yt,zt;
public void StartTimer(View view){
mSensor.registerListener(this, accSensor, SensorManager.SENSOR_DELAY_NORMAL);
handler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
if(startmillisec <= 0){
startmillisec = System.currentTimeMillis();
}
tempmillisec = System.currentTimeMillis() - startmillisec;
millisec = tempmillisec;
millisec /= 100;
millisec = millisec % 10;
sec = TU.MILLISECONDS.toSeconds(tempmillisec);
sec = sec % 60;
min = TU.MILLISECONDS.toMinutes(tempmillisec);
min = min % 60;
hour = TU.MILLISECONDS.toHours(tempmillisec);
hour = hour % 24;
tempstring = String.format("%02d:%02d:%02d:%d",hour,min,sec,millisec);
whiteplayertime.setText(tempstring);
handler.post(this); //This is the last in the code
}
};
handler.post(runnable);
3 ответа
Простое сохранение прошло с момента последнего останова и сохранено в переменной, если таймер работает или нет.
public MyTimer {
private long startTime;
private long elapsed;
private boolean running;
public void start() {
startTime = System.currentTimemillis();
running = true;
}
public void stop() {
elapsed = elapsed + System.currentTimemillis() - startTime;
running = false;
}
public long getElapsed() {
if (running) {
return elapsed + System.currentTimemillis() - startTime;
} else {
return elapsed;
}
}
}
Вам нужно следить за временем паузы. Держать на паузе
long pauseTime=System.currentMillisecond()
и на без паузы
long timeInPause = System.currentMillisecond()-pauseTime
затем
i= System.currentMillisecond() - startMillisecond - timeInPause
Создать 3 поля. StartPause время в MS, когда началась пауза. EndPause время в MS, когда пауза прекратилась. TotalPause общее время паузы.
Каждый раз, когда пользователь делает паузу и продолжает, добавьте разницу к общему времени паузы. Вычтите это из вашего общего времени