mSleepTimer = new SleepTimer(3000, 1000);
mSleepTimer.startTimer();
private class SleepTimer extends CountDownTimer {
public SleepTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
public void startTimer() {
start();
}
public void cancelTimer() {
cancel();
}
@Override
public void onFinish() {
processNext();
}
@Override
public void onTick(long millisUntilFinished) {
}
}
public void cancle() {
if (timer != null) {
timer.cancel();
timer = null;
}
}
使用有两点需要注意:
1是需要在主线程中进行使用。
2空指针:如果在activity或者fragment关闭销毁的时候没有调用cancle方法,它的onTick方法还是会继续执行,这个时候UI控件都为空,不注意判断的话很容易空指针。
可以看到CountDownTimer的原理还是用到了Handler,所以很容易造成内存泄漏问题,当Activity或者Fragment关闭而倒计时还未结束的时候,会在后台一直执行,而很多时候我们用倒计时会有更新UI的操作,而控件都持有activity的引用,长期得不到释放的话就会造成内存泄漏,甚至会造成1所说的空指针问题,所以一般要在activity或fragment销毁的时候调用cancle方法。