1、基本用法
CountDownTimer可以在主线程中直接使用,回调的线程也是主线程
CountDownTimer countDownTimer = new CountDownTimer(1000L * 30, 1000L) {
@Override
public void onTick(long millisUntilFinished) {
// your logic for tick
Log.i("TEST", "onTick - " + Thread.currentThread() + ", millisUntilFinished - " + millisUntilFinished);
}
@Override
public void onFinish() {
// your logic for finish
Log.i("TEST", "onFinish" + Thread.currentThread());
}
};
countDownTimer.start();
运行结果
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 29999
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 28998
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 27996
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 26994
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 25990
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 24988
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 23986
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 22983
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 21979
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 20976
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 19972
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 18970
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 17968
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 16965
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 15963
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 14961
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 13958
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 12955
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 11952
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 10950
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 9948
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 8946
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 7944
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 6942
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 5939
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 4936
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 3932
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 2929
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 1926
I/TEST: onTick - Thread[main,5,main], millisUntilFinished - 925
I/TEST: onFinishThread[main,5,main]
2、cancle
可以看到CountDownTimer的原理还是用到了Handler,所以很容易造成内存泄漏问题,当Activity或者Fragment关闭而倒计时还未结束的时候,会在后台一直执行,而很多时候我们用倒计时会有更新UI的操作,而控件都持有activity的引用,长期得不到释放的话就会造成内存泄漏,甚至会造成1所说的空指针问题,所以一般要在activity或fragment销毁的时候调用cancle方法
countDownTimer.cancel();