java - 想要阻止毫秒增加

标签 java android time milliseconds

我正在尝试创建一个计时器应用程序,但我遇到了毫秒问题。

当有人激活计时器时,我保存当前的毫秒数,然后我只是为了获得它们之间的差异

长开始毫秒; 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);

最佳答案

简单保存从最后一个停止值开始耗时,并保存在变量中(无论计时器是否正在进行)。

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;
        }
    }
}

关于java - 想要阻止毫秒增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32329108/

相关文章:

javascript - 对毫秒数组求和

c - 如何测量线程通过条件变量所花费的时间?

java - JUnitCore.runClasses 有什么用?

java - 玩! Java 8 的框架支持 可选

java - 如何在 Android 上将几个视频合并为一个

android - picasso 的显示方向错误

java - 哪些Java库做HTTP Accept Header解析?

Java.awt.robot mousepress 没有任何效果

Android/Kotlin : How to create a class that uses a DBLocal class? 报错信息:类型不匹配需要上下文

Java 时间即时格式差异