获取短信验证码倒计时

我用的是谷歌自带的类 CountDownTimer 

直接看用法

    private CountDownTimer timer = new CountDownTimer(60000+300,1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            if (null != tv_titles){
                tv_titles.setEnabled(false);
                tv_titles.setTextColor(Color.RED);
                tv_titles.setText((millisUntilFinished/1000)+"s");
            }
        }

        @Override
        public void onFinish() {
            if (null != tv_titles){
                tv_titles.setEnabled(true);
                tv_titles.setTextColor(Color.WHITE);
                tv_titles.setText("获取验证码");
            }
        }
    };

CountDownTimer自带俩个方法 onTick() 和 onFinish()其中开始执行 timer.start(),停止执行 timer.cancle();

因为CountDownTimer这个类容易造成空指针 内存溢出 还有时间不太准的问题 因为谷歌开发者考虑的很周全,所以他事先做好了处理,在执行onTick的方法时,google源码里面减去了程序执行到这里的时候所消耗的时间所以我们的时间如果是60s开始的,会直接执行59s开始,所以我们可以加300ms来你补。然后就是空指针和内存溢出,因为CountDownTimer的底层用的是handler,所以我们一般都会用到ui的更新操作,当然,我们的activity或者fragment销毁了,timer不得释放就可能导致不能及时回收,可能出现内存泄漏。

所以我们要在我们的onDestory()方法中销毁我们的timer。

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (timer != null){
            timer.cancel();
            timer = null;
        }
    }

猜你喜欢

转载自blog.csdn.net/mintent/article/details/88663754