postDelayed Handler不会停止

时间:2013-11-19 08:16:47

标签: java android handler runnable

我需要的是当competition.isTimerStarted变为false时,此runnable应该启动buttonsProcedure()一次并自行停止 但这不会发生 - 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
                 }
            };

我怎样才能正确阻止它?

2 个答案:

答案 0 :(得分:1)

        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构造

答案 1 :(得分:0)

让它脱离可运行状态。你正在做的是删除回调,然后(下一行) - 再次发布它。如果您更改了地点,您将达到所需的效果,但代价是始终设置它并删除回调。所以只需从代码中的其他位置删除回调。