Java 后延迟处理程序不';停不下来
我需要的是当competition.isTimerStarted变为false时,此runnable应启动按钮过程()一次并自行停止 但这并没有发生-buttonsProcedure()将永远被调用,runnable不会停止Java 后延迟处理程序不';停不下来,java,android,handler,runnable,Java,Android,Handler,Runnable,我需要的是当competition.isTimerStarted变为false时,此runnable应启动按钮过程()一次并自行停止 但这并没有发生-buttonsProcedure()将永远被调用,runnable不会停止 timerRun=new Runnable() { @Override public void run() { timerTVmainm
timerRun=new Runnable()
{
@Override
public void run() {
timerTVmainmenue.setText(competition.getTimerTime());
if (!competition.isTimerStarted) {thandler.removeCallbacks(timerRun);Log.d("MyLog","timerrun is blame for infinite butproc");buttonsProcedure();}
thandler.postDelayed(timerRun, 243); //looping this for every 243 ms
}
};
我怎样才能正确地阻止它
timerRun=new Runnable()
{
@Override
public void run() {
timerTVmainmenue.setText(competition.getTimerTime());
if (!competition.isTimerStarted){
thandler.removeCallbacks(this);
Log.d("MyLog","timerrun is blame for infinite butproc");
buttonsProcedure();
return;
}
thandler.postDelayed(this, 243); //looping this for every 243 ms
}
};
您必须在if条件中添加
return
,或者使用if-else
构造将其从可运行状态中取出。您正在做的是删除回调,然后(下一行)——再次发布它。如果更改位置,您将达到预期效果,但代价是始终设置并删除回调。因此,只需删除代码中其他地方的回调。哇,谢谢!由于某种原因,我可以在7分钟内接受答案。你能给我解释一下这个问题吗?为什么回归能挽救这种局面?没有什么好解释的。。if子句结束括号后的下一条指令被postDelayed。因此,将其从if子句中的runnable中删除,并在if块之后重新发布。有了这个返回,你就破坏了正常的代码流,返回的东西就成功了。。我不在乎是晚了还是什么,但我必须说谢谢,谢谢:)