Java 安卓定时器速度增加
我对安卓系统很陌生,我在定时器方面有点问题。最初它工作正常,但每次我单击按钮重新启动它,速度都会增加。所以在一段时间内,它开始迅速发展 有人能告诉我如何预防这种情况吗:Java 安卓定时器速度增加,java,android,thread-sleep,Java,Android,Thread Sleep,我对安卓系统很陌生,我在定时器方面有点问题。最初它工作正常,但每次我单击按钮重新启动它,速度都会增加。所以在一段时间内,它开始迅速发展 有人能告诉我如何预防这种情况吗: if (game_start==false) { game_start=true; textfield=(TextView)findViewById(R.id.TVTimer); handler=new Handler(); Runnable runnable = new Runnable ()
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();
}
实际上,onClick线程的一个新实例启动并使用number&prev\u time变量,该变量超出了线程的范围。要防止出现这种情况,只需在单击按钮时重置number和prev\u time变量的值。查看java.util.Timer.scheduleAtFixedRate()是否先取消了原始的
可运行的?您应该在启动计时器之前或启动计时器时,使用属性存储对可运行
的引用,并调用Handler.removeCallbacks(yourHandlerHere)
另外,我建议您只使用处理程序
和可运行
作为计时器,而不是线程
(除非您确实必须这样做)。当您单击按钮时,是否再次初始化数字
值?是,我每次尝试在开始时设置number=0,但它的作用是:如果上一个游戏是1,2,3,4…现在在新游戏中,它开始时是1,5,2,6..重新启动时,你会杀死任何以前的线程,还是会有更多的线程每秒更新一次相同的值?另外,对于这样的延迟,只考虑代码> >后延迟()/代码>而不是单独的线程。我不确定你是什么意思。有没有可能我每次都杀掉线程,然后开始一个新的线程?我同意@laalto的说法。在启动新线程之前,必须中断线程。在对象中保留线程,然后在启动新线程之前杀死旧线程。已尝试初始化为0,但没有解决问题。这甚至无法解决问题。