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>variablei=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的答案中的方法。只要确保你在活动暂停时保存所用的时间,并在活动恢复时将其还原。这看起来很好,而且很简单也很容易理解。谢谢!如果你觉得这个答案有用,你可以用绿色标志将它标记为正确答案。谢谢