项目中用绑定手机号功能,发送之后2分钟倒计时。
倒计时的功能用到了CountDownTimer类,这是android的一个工具类。很巧妙
demo地址:http://download.csdn.net/detail/pangzaifei/7006651
倒计时的功能用到了CountDownTimer类,这是android的一个工具类。很巧妙
下面是这个类的原理解析,此类比较简单。但很强大。
package com.example.democountdowntheory;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
public abstract class MyCountDownTimer {
/*原理:
* 随时用SystemClock.elapsedRealtime()获取时间,使用这个时间来精确倒计时的数值
* 其他比较简单看看就明白了
* */
private static final int MSG = 1;
private long mSetTotalTime;// 总的时间120000,120秒
private long mSetDownValue;// 减少的值1000,1秒
public MyCountDownTimer(long totalTime, long downValue) {
this.mSetTotalTime = totalTime;
this.mSetDownValue = downValue;
}
/**
* 启动
*/
public final synchronized MyCountDownTimer start() {
if (mSetTotalTime <= 0) {
onFinish();
return this;
}
mStartTime = SystemClock.elapsedRealtime() + mSetTotalTime;// 开始的时间+开机到现在的时间
mHandler.sendMessage(mHandler.obtainMessage(MSG));
return this;
};
/**
* 变化的值
*/
public abstract void onTick(long remain);
public void cancel() {
mHandler.removeMessages(MSG);
}
/**
* 结束之后
*/
public abstract void onFinish();
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
synchronized (MyCountDownTimer.this) {
long remain = mStartTime - SystemClock.elapsedRealtime();// 减少后,剩余的时间。
if (remain <= 0) {
onFinish();// 完成
} else if (mSetTotalTime < mSetDownValue) {
// 设置的值<down减少的值
sendMessageDelayed(obtainMessage(MSG), remain);
} else {
// 减少操作
long pre = SystemClock.elapsedRealtime();
onTick(remain);// 将值回调,供用户使用
long delay = pre + mSetDownValue
- SystemClock.elapsedRealtime();
while (delay < 0) {
delay += mSetDownValue;
}
sendMessageDelayed(obtainMessage(MSG), delay);
}
}
};
};
private long mStartTime;
}
demo地址:http://download.csdn.net/detail/pangzaifei/7006651