我已阅读其他有关停止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大于两个?
希望这里有一个蹩脚的语法新手错误...
答案 0 :(得分:1)
这是因为您正在调用checkTemp()
并删除回调,然后在checkTemp()
返回时立即再次发布缩小对象。