我需要的是当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
}
};
我怎样才能正确阻止它?
答案 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)
让它脱离可运行状态。你正在做的是删除回调,然后(下一行) - 再次发布它。如果您更改了地点,您将达到所需的效果,但代价是始终设置它并删除回调。所以只需从代码中的其他位置删除回调。