在 Android 使用 Timer 做倒计时。实现开始 (start),取消 (cancel),暂停 (pause),恢复 (resume)功能


在 Android 开发中,我们很多地方会使用到倒计时功能。可以使用 Timer 做倒计时(ps:虽然我不建议)。

Step00. 初始化

//初始化timerpublic 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();}//实现更新主线程UIHandler 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.源码

Github Code

更多相关文章

  1. PhotoView的使用
  2. 如何让Android系统或Android应用执行shell脚本
  3. Android(安卓)纯代码化编码2_基本控件
  4. 我的Android进阶之旅------>Android实现音乐示波器、均衡器、重
  5. 2011年Android(安卓)MediaPlayer学习笔记之一
  6. 【Android笔记】执行命令行语句
  7. android实操--练习1
  8. Android使用GridView实现日历功能(详细代码)
  9. Android(安卓)TabHost设置setCurrentTab(index),当index!=0时,默认加

随机推荐

  1. Bluetooth--- android -- 蓝牙 bluetooth
  2. Android获取手机号码和运营商信息的方法
  3. Android手势放大缩小组件
  4. Android 布局深度优化(减少布局层次)
  5. Android(安卓)IjkMediaPlayer编译支持RTS
  6. Android - 如何将2个或多个应用放到一个
  7. androidのBack返回键,home键,menu键监听使
  8. android 4.4 禁止使用power键的休眠功能
  9. 《Android Dev Guide》系列教程7:Android
  10. Android布局——Linearlayout线性布局