如何从程序内停止runnable

时间:2015-11-23 01:38:36

标签: java android runnable

我已阅读其他有关停止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似乎在做什么&#34; checkTemp&#34;但是......不会删除回调。当它停止时,我将第二个SLider设置为h.removeCallbacks(缩小),并且工作正常。为什么它没有h.removeCallbacks尽管它承认tempadd大于两个?

希望这里有一个蹩脚的语法新手错误...

1 个答案:

答案 0 :(得分:1)

这是因为您正在调用checkTemp()并删除回调,然后在checkTemp()返回时立即再次发布缩小对象。