Хотите остановить увеличение миллисекунд

Я пытаюсь создать приложение таймера, но у меня есть эта проблема с миллисекундами.

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

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 общее время паузы.

Каждый раз, когда пользователь делает паузу и продолжает, добавьте разницу к общему времени паузы. Вычтите это из вашего общего времени

Другие вопросы по тегам