想要停止增加毫秒数
Want to stop milliseconds from increasing
我正在尝试创建一个计时器应用程序,但我遇到了毫秒问题。
当有人激活计时器时,我会保存当前的毫秒数,然后我只是为了得到它们之间的差异
long startMillisecond;
long i = System.currentMillisecond() - startMillisecond
然后我用一些其他代码显示这个变量i
。然而,当我暂停我的程序时,我的变量 i
保持在正确的值,但是当我再次启动程序时,我得到 "wrong" 值,因为 System.currentMillisecond()
不断增加(内部),所以它看起来点赞 "jumps" 几秒
示例:启动应用程序 > 变量 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;
}
}
}
创建 3 个字段。
StartPause 暂停开始时以 MS 为单位的时间。
EndPause 暂停停止时以 MS 为单位的时间。
TotalPause 总暂停时间。
每次用户暂停和继续时,将差异添加到总暂停时间。从你的总时间中减去这个
你需要记录暂停时间。继续,暂停
long pauseTime=System.currentMillisecond()
并在取消暂停时
long timeInPause = System.currentMillisecond()-pauseTime
然后
i= System.currentMillisecond() - startMillisecond - timeInPause
我正在尝试创建一个计时器应用程序,但我遇到了毫秒问题。
当有人激活计时器时,我会保存当前的毫秒数,然后我只是为了得到它们之间的差异
long startMillisecond;
long i = System.currentMillisecond() - startMillisecond
然后我用一些其他代码显示这个变量i
。然而,当我暂停我的程序时,我的变量 i
保持在正确的值,但是当我再次启动程序时,我得到 "wrong" 值,因为 System.currentMillisecond()
不断增加(内部),所以它看起来点赞 "jumps" 几秒
示例:启动应用程序 > 变量 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;
}
}
}
创建 3 个字段。 StartPause 暂停开始时以 MS 为单位的时间。 EndPause 暂停停止时以 MS 为单位的时间。 TotalPause 总暂停时间。
每次用户暂停和继续时,将差异添加到总暂停时间。从你的总时间中减去这个
你需要记录暂停时间。继续,暂停
long pauseTime=System.currentMillisecond()
并在取消暂停时
long timeInPause = System.currentMillisecond()-pauseTime
然后
i= System.currentMillisecond() - startMillisecond - timeInPause