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