Handler实现倒计时的两种方式

背景:

最近项目中,正好做到登录/注册这个功能块。它需要通过发送验证码,在规定的时间内用验证码来完成登录/注册。之前的项目中也有这个功能,但是觉得太复杂了,只好自己重新实现一遍。用Handler来做,觉得代码简介,逻辑也清楚。

代码一:

//在向服务端发送获取验证码成功的回调函数中,开始发消息:
mHandler.obtainMessage();
mHandler.sendEmptyMessage(MSG_CODE);

//消息的处理:
 private static final int MSG_CODE = 0;
 private int limitTime = 121;
 private Handler mHandler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message msg) {
            if(msg.what==MSG_CODE){
                limitTime--;
                if(limitTime>0){
                    mHandler.sendEmptyMessageDelayed(MSG_CODE,1000);
                    mBtnVerify.setText("倒计时:"+limitTime+"s");

                }else{
                    limitTime =121;//再次给limitTime 赋值,以便能重新计时
                    mBtnVerify.setText("获取验证码");
                }
                return true;
            }
            return  false;
        }
    });

代码二:



//在向服务端发送获取验证码成功的回调函数中,开始发消息:
mHandler.post(myRunnale);

//消息的处理:
 private int time = 11;

    private Handler mHandler = new Handler();
    private Runnable myRunnale = new Runnable() {
        @Override
        public void run() {
            time--;
            if(time>0){
                mHandler.postDelayed(myRunnale,1000);
                mTvChange.setText("剩余"+time+"s");
            }else{
                mTvChange.setText("完毕");
            }
        }
    };

从上述代码中可以看出:使用Handler.post(Runnable) 是一个发布Messgae的便利方法。

你可能感兴趣的:(Android基础)