Java 要停止毫秒数的增加吗

Java 要停止毫秒数的增加吗,java,android,time,milliseconds,Java,Android,Time,Milliseconds,我正在尝试创建一个计时器应用程序,但毫秒有这个问题 当有人启动计时器时,我会保存当前的毫秒数,然后我只需要这个来获得它们之间的差异 长起始毫秒; long i=System.current毫秒() 然后我用一些其他代码显示这个变量I。然而,当我暂停我的程序时,我的变量I保持在正确的值上,但当我再次启动程序时,我得到了“错误”的值,因为System.currentMillisSecond()不断增加(内部),所以它看起来像是在几秒钟内“跳跃” 示例:Start app>variablei=Syst

我正在尝试创建一个计时器应用程序,但毫秒有这个问题

当有人启动计时器时,我会保存当前的毫秒数,然后我只需要这个来获得它们之间的差异

长起始毫秒;
long i=System.current毫秒()

然后我用一些其他代码显示这个变量
I
。然而,当我暂停我的程序时,我的变量
I
保持在正确的值上,但当我再次启动程序时,我得到了“错误”的值,因为
System.currentMillisSecond()
不断增加(内部),所以它看起来像是在几秒钟内“跳跃”

示例:Start app>variable
i=System.currentmilliasecond()-startmilliasecond
等于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);
String-tempstring;
整数毫秒,秒,分钟,小时;
处理者;
可运行的可运行的;
传感器管理器传感器;
传感器;
按钮开始按钮、停止按钮、复位按钮;
TextView白播放时间、黑播放时间、xt、yt、zt;
公共void StartTimer(视图){
mSensor.registerListener(此、accSensor、SensorManager.SENSOR\u延迟\u正常);
handler=新的handler();
runnable=新的runnable(){
@凌驾
公开募捐{

如果(StartMilliesec从最后一个停止值开始简单保存,如果计时器正在运行或未运行,则保存在变量中

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;
        }
    }
}
创建3个字段。 开始使用暂停开始时的时间(毫秒)。 EndPause暂停停止时的时间(毫秒)。 总暂停总暂停时间


每次用户暂停并继续时,将差异添加到总暂停时间中。将其从总时间中减去。您需要跟踪暂停时间。保持,暂停时

long pauseTime=System.current毫秒()

联合国暂停

long-timeinpuse=System.current毫秒()-pauseTime

然后


i=System.current毫秒()-startMillSecond-timeinpuse

你能添加你的全部代码吗?你想让计时器只在你的应用程序处于活动状态/在前台时运行吗?@HannoBinder只在应用程序处于活动状态时运行是的。然后你可以使用@Davide的答案中的方法。只要确保你在活动暂停时保存所用的时间,并在活动恢复时将其还原。这看起来很好,而且很简单也很容易理解。谢谢!如果你觉得这个答案有用,你可以用绿色标志将它标记为正确答案。谢谢