您好,欢迎来到二三四教育网。
搜索
您的当前位置:首页Android 使用 Timer 做倒计时。实现开始 (sta

Android 使用 Timer 做倒计时。实现开始 (sta

来源:二三四教育网

在 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;
}

Step06.源码

Copyright © 2019- how234.cn 版权所有 赣ICP备2023008801号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务