我对Android很新,我对计时器有点麻烦。它最初工作正常,但每次我点击按钮重新启动它,速度会增加。所以在一段时间内它开始很快。
有人可以告诉我如何防止这种情况:
if (game_start==false) {
game_start=true;
textfield=(TextView)findViewById(R.id.TVTimer);
handler=new Handler();
Runnable runnable = new Runnable () {
@Override
public void run(){
while(Running){
try{
Thread.sleep(1000);
} catch(InterruptedException e){
e.printStackTrace();
}
handler.post(new Runnable(){
@Override
public void run(){
number=number+1;
time_done=number-prev_time;
System.out.println("timer" + time_done);
// textfield.setText(String.valueOf(number));
}
});
}
}
};
new Thread(runnable).start();
}
答案 0 :(得分:1)
实际上onClick一个新的线程实例启动并使用数字& prev_time 超出线程范围的变量。要防止这种情况,只需重置数字&的值。点击按钮时的 prev_time 变量。
答案 1 :(得分:0)
看一下java.util.Timer.scheduleAtFixedRate()
答案 2 :(得分:0)
您是否先取消原来的Runnable
?您应该使用属性存储对Runnable
的引用,并在开始或启动计时器之前调用Handler.removeCallbacks (yourHandlerHere)
此外,我建议您仅使用Handler
和Runnable
作为计时器而不是Thread
(除非您真正强调强调必须)