我有一些带有嵌套 TimerTasks 的测试代码,即每 10 秒调用一个任务来更改参数,它启动另一个计时器,每 100 毫秒左右运行一些计算。当我在第一个计时器上调用取消时,它会取消外部 TimerTask 但内部的继续运行。
我该怎么做才能让内部任务也停止?请注意,在下面的代码中,cancel() 覆盖永远不会被调用,尽管外部任务确实停止了。
class CalcTask extends TimerTask
{
// randomly changes calc interval every time it is called
public void run(){
if (mTmr != null)
mTmr.cancel();
mTmr = null;
TimerTask calcTask = new TimerTask(){ public void run(){ Log.i("TempSensor","chad"); doCalcs(); } };
int min = Integer.parseInt(mEditThreadMin.getText().toString());
int max = Integer.parseInt(mEditThreadMax.getText().toString());
int interval = mRand.nextInt(max-min)+min + 1;
mTmr = new Timer(true);
mTmr.schedule(calcTask,0,interval);
}
@Override
public boolean cancel()
{
Log.i("TempSensor","Cancelling");
if(mTmr != null)
{
mTmr.cancel();
mTmr.purge();
}
return super.cancel();
}
private Random mRand = new Random();
private Timer mTmr = null;
};
... // later on
mTimerCalc1.scheduleAtFixedRate(new CalcTask(), 0, (int)10e3);