1 使用CountDownTimer
//需要两个参数,一个是总计时的时间,一般验证码是60秒,就是60*1000。第二个参数是设置计时的速度,1000就是每秒一次。
CountDownTimer timer = new CountDownTimer(60*1000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
tvGetCode.setEnabled(false);
tvGetCode.setText("已发送(" + millisUntilFinished / 1000 + ")");
}
@Override
public void onFinish() {
tvGetCode.setEnabled(true);
tvGetCode.setText("重新获取验证码");
}
}.start();
2、使用线程
private int time=60;
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
tvGetCode.setEnabled(false);
tvGetCode.setText("已发送(" + String.valueOf(time) + ")");
break;
case 2:
tvGetCode.setEnabled(true);
tvGetCode.setText("获取验证码");
time = 60;
break;
}
}
};
public void startTime1() {
new Thread(new Runnable() {
@Override
public void run() {
time--;
if (time <= 0) {
mHandler.sendEmptyMessage(2);
} else {
mHandler.sendEmptyMessage(1);
mHandler.postDelayed(this, 1000);
}
}
}
).start();
}
3、使用Timer和TimerTask
private int time = 60;
private Timer timer2 = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
time--;
tvGetCode.setText("已发送(" + String.valueOf(time) + ")");
tvGetCode.setEnabled(false);
if (time <= 0) {
tvGetCode.setEnabled(true);
tvGetCode.setText("重新获取验证码");
}
}
});
}
};
timer2.schedule(task, time, 1000);