在 Android 使用 Timer 做倒计时。实现开始 (start),取消 (cancel),暂停 (pause),恢复 (resume)功能
在 Android 开发中,我们很多地方会使用到倒计时功能。可以使用 Timer 做倒计时(ps:虽然我不建议)。
Step00. 初始化
//初始化timer
public void initTimer() {
mTimerTask = new TimerTask() {
@Override
public void run() {
if (curTime == 0) {
curTime = MAX_TIME;
} else {
//计数器,每次减一秒。
curTime -= 1000;
}
Message message = new Message();
message.what = WHAT;
message.obj = curTime;
mHandler.sendMessage(message);
}
};
mTimer = new Timer();
}
//实现更新主线程UI
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case WHAT:
long sRecLen = (long) msg.obj;
//getCountTimeByLong()———— 毫秒换成00:00:00格式的方式,自己写的。
mTimerTv.setText(TimeTools.getCountTimeByLong(sRecLen));
//如果当前时间等于0时,则运行结束。
if (sRecLen <= 0) {
mTimer.cancel();
curTime = 0;
Toast.makeText(mContext, "结束", Toast.LENGTH_SHORT).show();
}
break;
}
}
};
Step01.销毁
当我们退出 Activity 不需要再使用倒计时功能,或者重新开始计时,都需要销毁上一次的 Timer。
/**
* destory上次使用的 Timer
*/
public void destroyTimer() {
if (mTimer != null) {
mTimer.cancel();
mTimer = null;
}
if (mTimerTask != null) {
mTimerTask.cancel();
mTimerTask = null;
}
}
Step02.开始&启动(start)
//已经结束或者还没有开始时。或者按了暂停标记。
destroyTimer();
initTimer();
// 参数:0,延时0秒后执行;1000,每隔1秒执行1次task。
mTimer.schedule(mTimerTask, 0, 1000);
isPause = false;
isPause 是暂停标记,false 表示没有按过暂停(默认),true 表示按了暂时。
如果是第一次开始则直接使用:
mTimer.schedule(mTimerTask, 0, 1000);
Step03.取消 & 停止(cancel)
//如果 curTime == 0,则不需要执行此操作
if (curTime == 0) {
break;
}
curTime = 0;
isPause = false;
mTimer.cancel();
Step04.暂停(pause)
//如果 curTime == 0,则不需要执行此操作
if (curTime == 0) {
break;
}
if (!isPause) {
isPause = true;
mTimer.cancel();
}
Step05.重开(resume)
if (curTime != 0 && isPause) {
destroyTimer();
initTimer();
mTimer.schedule(mTimerTask, 0, 1000);
isPause = false;
}