今天在使用到Android的计时器时,遇到了这个问题,所以在此记录一下该问题产生的原因和解决方法。
产生原因:
1.由于TimerTask已经在之前添加过,所以二次添加的时候,就会报这个错误。TimerTask不允许重复添加,所以在添加前一定要先将原来的取消掉。
解决方法:以一个计时器为例来说明:
public class LoginActivity extends Activity {
private Timer mTimer = null;
private int Count = 0;
private int TimeCount = 10; //倒计时秒数
private MyTimerTask mTask = null;
//开始计时
public void LoginTimeAccount(){
if(mTimer == null){
mTimer = new Timer();
}
if(mTimer != null && mTask != null){
mTask.cancel();
}
mTask = new MyTimerTask();
mTimer.schedule(mTask,1000,1000);
}
//取消计时
public void cancelTimeAccount(){
if(mTimer != null){
mTask.cancel();
mTimer.cancel();
mTimer = null;
}
}
private class MyTimerTask extends TimerTask{
@Override
public void run() {
Count++;
if(Count == TimeCount){
if(isLogin == false){
DismissWaitingDialog();
Count = 0;
mHandler.sendEmptyMessage(0x01);
cancelTimeAccount(); //取消计时
}
}
}
}
public Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg){
if(msg.what == 0x01){
Toast.makeText(this,"计时结束",Toast.LENGTH_SHORT).show();
}
}
}
注意这两个函数:
//开始计时
public void LoginTimeAccount(){
if(mTimer == null){
mTimer = new Timer();
}
if(mTimer != null && mTask != null){
mTask.cancel();
}
mTask = new MyTimerTask();
mTimer.schedule(mTask,1000,1000);
}
//取消计时
public void cancelTimeAccount(){
if(mTimer != null){
mTask.cancel();
mTimer.cancel();
mTimer = null;
}
}
初始化之前,一定要先将task取消,再重新创建。
计时结束后,要及时取消计时任务。