Java 如何在每次重新运行程序时将计时器重置为从00:00:00开始?
我添加到maintactity.javaJava 如何在每次重新运行程序时将计时器重置为从00:00:00开始?,java,android,Java,Android,我添加到maintactity.java private Button startButton; private Button pauseButton; private TextView timerValue; private long startTime = 0L; private Handler customHandler = new Handler(); long timeInMilliseconds = 0L; long timeSwapBuff = 0L; long updatedTi
private Button startButton;
private Button pauseButton;
private TextView timerValue;
private long startTime = 0L;
private Handler customHandler = new Handler();
long timeInMilliseconds = 0L;
long timeSwapBuff = 0L;
long updatedTime = 0L;
然后在onCreate中,我添加了:
当我运行程序时,计时器将自动启动,无需单击“启动”按钮。我希望计时器在运行程序时正确启动
customHandler.postDelayed(updateTimerThread,0);
timerValue = (TextView) findViewById(R.id.timerValue);
startButton = (Button) findViewById(R.id.startButton);
startButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
startTime = SystemClock.uptimeMillis();
customHandler.postDelayed(updateTimerThread, 0);
}
});
pauseButton = (Button) findViewById(R.id.pauseButton);
pauseButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
timeSwapBuff += timeInMilliseconds;
customHandler.removeCallbacks(updateTimerThread);
}
});
然后,方法updateTimerThread:
private Runnable updateTimerThread = new Runnable() {
public void run() {
timeInMilliseconds = 0L;//SystemClock.uptimeMillis() - startTime;
timeInMilliseconds = SystemClock.uptimeMillis() - startTime;
updatedTime = timeSwapBuff + timeInMilliseconds;
int secs = (int) (updatedTime / 1000);
int mins = secs / 60;
secs = secs % 60;
int milliseconds = (int) (updatedTime % 1000);
timerValue.setText("" + mins + ":"
+ String.format("%02d", secs) + ":"
+ String.format("%03d", milliseconds));
customHandler.postDelayed(this, 0);
}
};
在这种方法中,我做到了:
timeInMilliseconds = 0L;
但变化不大。
我想做的是每次我从一开始就运行我的程序,计时器将从00:00:00开始
编辑
在“关于”活动中,我现在做了以下几点:
startTime = SystemClock.uptimeMillis();
customHandler.postDelayed(updateTimerThread,0);
timerValue = (TextView) findViewById(R.id.timerValue);
startButton = (Button) findViewById(R.id.startButton);
startButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
startTime = SystemClock.uptimeMillis();
customHandler.postDelayed(updateTimerThread, 0);
}
});
pauseButton = (Button) findViewById(R.id.pauseButton);
pauseButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
timeSwapBuff += timeInMilliseconds;
customHandler.removeCallbacks(updateTimerThread);
}
});
在UpadteTimerRead中,我没有更改:
private Runnable updateTimerThread = new Runnable() {
public void run() {
timeInMilliseconds = System.currentTimeMillis() - startTime;
updatedTime = timeSwapBuff + timeInMilliseconds;
int secs = (int) (updatedTime / 1000);
int mins = secs / 60;
secs = secs % 60;
int milliseconds = (int) (updatedTime % 1000);
timerValue.setText("" + mins + ":"
+ String.format("%02d", secs) + ":"
+ String.format("%03d", milliseconds));
customHandler.postDelayed(this, 0);
}
};
仍然在运行程序时,计时器不是从00:00:00开始的,但我在分钟数上看到一个很长的数字,也就是秒数,就像它继续运行一样,没有重新启动一样。在
开始按钮onClick
方法中,您有:
startTime = SystemClock.uptimeMillis();
customHandler.postDelayed(updateTimerThread, 0);
但在顶部,您只有:
customHandler.postDelayed(updateTimerThread,0);
由于updateTimerThread
使用startTime
值,您很可能希望在顶部以相同的方式初始化它。将计时器重置回零的关键在updatedTime
变量中。这就是当您按下开始按钮时,计时器开始的位置
无需重新初始化startTime变量,因为startTime=SystemClock.uptimeMillis()代码>已将开始时间正确设置回0。请记住,startTime
与计时器上当前显示的内容相关。这就是为什么计时器从您暂停的位置开始,而不会跳过计时器暂停时的秒数
在启动按钮的onClick
事件中,将timeSwapBuff
设置回0L
。这会将时间缓冲区重置为0。然后将其添加回startTime(也是0),并强制计时器完全重新开始
尝试:
timeinms=0L代码>被下一行覆盖timeinmillises=SystemClock.uptimeMillis()-startTime代码>对,我已经试过了,但没有第二行,但效果不好。这并不重要,而是使用而不是SystemClock.uptimeMillis()
--好吧,这可能很重要,取决于睡眠模式应该如何处理。这并不重要,但要结合你的格式调用:String.format(“%d:%02d:%02d”,分、秒、毫秒)
你需要在第一次调用postDelayed
之前设置startTime
,我编辑了我的问题,并添加了我现在所做的。仍然在运行程序时,计时器不是从00:00:00开始的,但我在分钟数上看到一个很长的数字,就像它在继续一样,不是像重置一样重新开始。@ShimritHadadi您使用uptimeMillis
初始化,但线程使用currentTimeMillis
。它们不一样,或者在任何方面都不可比无关:为什么timeinmillizes
和updatetime
声明为字段,而不仅仅是局部变量?
public void onClick(View view) {
timeSwapBuff = 0L;
startTime = SystemClock.uptimeMillis();
customHandler.postDelayed(updateTimerThread, 0);
}