hadlerMessager()......
` /**
* Start the countdown.
*/
public synchronized final CountDownTimer start() {
mCancelled = false;
if (mMillisInFuture <= 0) {
onFinish();
return this;
}
mStopTimeInFuture = SystemClock.elapsedRealtime() + mMillisInFuture;
在这里发送了一个消息
mHandler.sendMessage(mHandler.obtainMessage(MSG));
return this;
}`
` // handles counting down
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
synchronized (CountDownTimer.this) {
if (mCancelled) {
return;
}
final long millisLeft = mStopTimeInFuture - SystemClock.elapsedRealtime();
if (millisLeft <= 0) {
onFinish();
} else if (millisLeft < mCountdownInterval) {
// no tick, just delay until done
sendMessageDelayed(obtainMessage(MSG), millisLeft);
} else {
long lastTickStart = SystemClock.elapsedRealtime();
onTick(millisLeft);
// take into account user's onTick taking time to execute
long delay = lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime();
// special case: user's onTick took more than interval to
// complete, skip to next interval
while (delay < 0) delay += mCountdownInterval;
sendMessageDelayed(obtainMessage(MSG), delay);
}
}
}
};`
其实源码跟我们要写的代码都是差不多的只不过是他给我们做了一个封装而已,可以让我们减少很多代码量。
代码贴:
mAuthCodeTime = new AuthCodeTime(61 * 1000, 1000);
mAuthCodeTime.start();//开启倒计时
mAuth_code_bt.setFocusable(false);//设置 buuton 不可获取焦点和不可用
mAuth_code_bt.setEnabled(false);
classAuthCodeTimeextendsCountDownTimer {/**
* @param millisInFuture The number of millis in the future from the call
* to {@link #start()} until the countdown is done and {@link #onFinish()}
* is called.
* @param countDownInterval The interval along the way to receive
* {@link #onTick(long)} callbacks.
*/
public AuthCodeTime(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onTick(long millisUntilFinished) {
mAuth_code_bt.setText(millisUntilFinished / 1000 + "s");
}
@Override
public void onFinish() {
mAuth_code_bt.setText("发送验证码");
mAuth_code_bt.setFocusable(true);
mAuth_code_bt.setEnabled(true);
}
}
CountDownTime 是android给我们提供的一个倒计时的类使用这个类避免了我们在代码里写很多冗余的代码 。源码是这样解说这个类的:在安排的倒计时里,在时间到来为止,随着时间的间隔去有规律的通知。以下就是源码的说明和用例:Schedule a countdown until a time in the future, withregular notifications on inter