1.概览
Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。
TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。
原理:其基本处理模型是单线程调度的任务队列模型,Timer不停地接受调度任务,所有任务接受Timer调度后加入TaskQueue,TimerThread不停地去TaskQueue中取任务来执行.
开始运行
Timer mTimer = new Timer();
mTimer.schedule(new TimerTask() {
@Override
public void run() {
••••
}, 1000, 1000);
} // 1s之后每隔1s钟执行一次
结束
if (mTimer != null) {
mTimer.cancel();
mTimer = null;
}
timer.schedule(task, time); //time为Date类型:在指定时间执行一次。
timer.schedule(task, firstTime, period); //firstTime为Date类型,period为long,表示从firstTime时刻开始,每隔period毫秒执行一次。
timer.schedule(task, delay); //delay 为long类型:从现在起过delay毫秒执行一次。
timer.schedule(task, delay, period);//delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。
CountDowmTimer倒计时控件
1、CountDownTimer 直接 new 出来使用,其构造函数
/**
* 类中的构造函数
* @param millisInFuture
* @param countDownInterval
*/
public VerificationCountDownTimer(long millisInFuture,long countDownInterval){
super(millisInFuture, countDownInterval);
}
参数 - millisInFuture:设置倒计时的总时间(毫秒)
参数 - countDownInterval:设置每次减去的时间(毫秒)
2、方法
public final void cancel ()
public abstract void onFinish ()
public abstract void onTick (long millisUntilFinished)
public final CountDownTimer start ()
cancel() 取消当前任务
onFinish() 当前任务完成的时候调用
onTick(long millisUntilFinished) 当前任务每完成一次倒计时间隔时间时回调
start() 开始当前的任务(必须调用,才会开启)
60s倒计时
/**
* 点击发送按钮后手机会接收到验证码,倒计时60s
* @ClassName: TimeCount
*/
public class TimeCount extends CountDownTimer {
private Button btn_count;
public TimeCount(long millisInFuture, long countDownInterval,Button btn_count) {
super(millisInFuture, countDownInterval);
this.btn_count = btn_count;
}
@Override
public void onTick(long millisUntilFinished) {
btn_count.setEnabled(false);
btn_count.setText(millisUntilFinished / 1000 + "秒");
}
@Override
public void onFinish() {
btn_count.setEnabled(true);
btn_count.setText(R.string.get_verification_code);
}
运行
timeCount = new TimeCount(60000, 1000,btn);
timeCount.start();
注意
在使用CountDownTimer时,在Activity或fragment生命周期结束时,调用timer.cancle()方法
@Override
protected void onDestroy() {
super.onDestroy();
if (mTimer != null) {
mTimer.cancel();
mTimer = null;
}