Java 后延迟处理程序不';停不下来

Java 后延迟处理程序不';停不下来,java,android,handler,runnable,Java,Android,Handler,Runnable,我需要的是当competition.isTimerStarted变为false时,此runnable应启动按钮过程()一次并自行停止 但这并没有发生-buttonsProcedure()将永远被调用,runnable不会停止 timerRun=new Runnable() { @Override public void run() { timerTVmainm

我需要的是当competition.isTimerStarted变为false时,此runnable应启动按钮过程()一次并自行停止 但这并没有发生-buttonsProcedure()将永远被调用,runnable不会停止

 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块之后重新发布。有了这个返回,你就破坏了正常的代码流,返回的东西就成功了。。我不在乎是晚了还是什么,但我必须说谢谢,谢谢:)