如何从程序中停止运行

How to stop runnable from within program

我已经阅读了有关停止 Runnnable 的其他帖子;我对此很陌生。

我正在尝试让自定义视图绘制一个矩形,稍等一下,然后再绘制一个。为了弄清楚 Runnables 是如何工作的,我正在尽我所能阅读并使用 Toast 来查看动作被重复了多少次。

如果我通过单击按钮或滑动滑块之类的操作来停止它,我已经得到了一个简单的工作。但是,我希望它自行停止。

h = new Handler();  
// assorted details   -- I'm using a Slider for user input.   

public void onStopTrackingTouch (SeekBar firstSlider){
                 if(((addend1 > 0) && (addend2<0))||(addend1<0&&addend2>0) )
                {                
            h.post(shrink);
                }
            }
        });

private Runnable shrink = new Runnable(){
         @Override
        public void run() {             
for (int j = 0; j < 4; j++){
    Toast.makeText(getApplicationContext(), "Subtract!", Toast.LENGTH_SHORT).show();
    tempadd++;
Log.i("WatchAnimActivity", "tempadd is " + tempadd);
    checkTemp();
    h.postDelayed(shrink, 18000);
}
   }};

public void checkTemp()
{
  if (tempadd >= 2)
    Log.i("WatchAnimActivity", "tempadd in Check Temp is " + tempadd);

    h.removeCallbacks(shrink);}
}

我也试过这个:

public void checkTemp( { h.removeCallbacks(shrink);   }

我无法理解为什么 Android 似乎在做 "checkTemp" 但...不会删除回调。当它停止时,我将第二个 SLider 设置为 h.removeCallbacks(shrink),并且工作正常。为什么它无法 h.removeCallbacks 即使它承认 tempadd 是“远远大于二”?

希望这里出现蹩脚的语法新手错误...

因为你在调用checkTemp()并移除回调,然后在checkTemp() returns.

时立即post再次收缩对象