CountDownTimer 实现倒计时功能

Stella981
• 阅读 434

CountDownTimer

CountDownTimer 是android 自带的一个倒计时类,使用这个类可以很简单的实现 倒计时功能

CountDownTimer 的实现方式

 new CountDownTimer(6000,1000) {//第一个参数表示的是倒计时的总时间,第二参数表示的是倒计时的间隔时间。
                    @Override
                    public void onTick(long millisUntilFinished) {//倒计时的过程
                        textView.setText(millisUntilFinished / 1000 + "秒");
                    }

                    @Override
                    public void onFinish() {//倒计时结束
                        textView.setText("倒计时结束");
                    }
                }.start();

实现效果

CountDownTimer 实现倒计时功能

取消计时器

调用 CountDownTimer 的 cancel() 方法,可以为我们取消计时器:但是这个方法,只有在 android 5.0 以上才有效果,在android 5.0 以下并没有效果。如果需要在android 5.0 以下的系统中也使用 cancel,需要我们自己根据 CountDownTimer 源码中的 实现方式,重新实现一下。 cancel()源码

   /**
     * Cancel the countdown.
     */
    public synchronized final void cancel() {
        mCancelled = true;
        mHandler.removeMessages(MSG);
    }


 private static final int MSG = 1;


    // handles counting down
    private Handler mHandler = new Handler() {

        @Override
        public void handleMessage(Message msg) {

            synchronized (CountDownTimer.this) {
                if (mCancelled) {
                    return;
                }

                final long millisLeft = mStopTimeInFuture - SystemClock.elapsedRealtime();

                if (millisLeft <= 0) {
                    onFinish();
                } else if (millisLeft < mCountdownInterval) {
                    // no tick, just delay until done
                    sendMessageDelayed(obtainMessage(MSG), millisLeft);
                } else {
                    long lastTickStart = SystemClock.elapsedRealtime();
                    onTick(millisLeft);

                    // take into account user's onTick taking time to execute
                    long delay = lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime();

                    // special case: user's onTick took more than interval to
                    // complete, skip to next interval
                    while (delay < 0) delay += mCountdownInterval;

                    sendMessageDelayed(obtainMessage(MSG), delay);
                }
            }
        }
    };

由于在 android 5.0以上 增加了一个

 private boolean mCancelled = false;

所以我们只需要在 5.0 以下的系统中,去掉

 if (mCancelled) {
                    return;
                }

去掉这个判断即可。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java线程
倒计时器CountDownLatch使用个例publicclassTest{staticfinalCountDownLatchendnewCountDownLatch(10);staticclassCounDownLatchDemo
昔不亏 昔不亏
3年前
「组件」倒计时
1:在components文件夹下新建CountDown.vuejs<template<p{{time}}</p</template<scriptexportdefault{data(){return{time:'',
Wesley13 Wesley13
3年前
Java并发系列5
今天讲一个倒计时器工具,叫CountDownLatch。需要这个工具的场景大概有:当所有的小任务都完成之后,再启动大任务。先看代码:publicclassCountDownLatchDemo{staticfinalCountDownLatchLATCHnewCountDownLatch(10);
Courtship Courtship
3年前
【UE4官方案列学习】在UE4使用计时器实现一个倒计时事件(定时生成物体)
UE4Version:4.27.0VisualStudio201916.10.2在UE4使用计时器实现一个倒计时事件.h文件定义pragmaonceinclude"CoreMinimal.h"include"GameFramework/Actor.h"include"Components/TextRenderComponent.h"i
Wesley13 Wesley13
3年前
mysql中时间比较的实现
MySql中时间比较的实现unix\_timestamp()unix\_timestamp函数可以接受一个参数,也可以不使用参数。它的返回值是一个无符号的整数。不使用参数,它返回自1970年1月1日0时0分0秒到现在所经过的秒数,如果使用参数,参数的类型为时间类型或者时间类型的字符串表示,则是从1970010100:00:0
Stella981 Stella981
3年前
CountDownLatch和CylicBarrier以及Semaphare你使用过吗
CountDownLatch是什么CountDownLatch的字面意思:倒计时门栓它的功能是:让一些线程阻塞直到另一些线程完成一系列操作后才唤醒。它通过调用await方法让线程进入阻塞状态等待倒计时0时唤醒。它通过线程调用countDown方法让倒计时中的计数器减去1,当计数器为0时,会唤醒哪些因为调用了await而阻塞的线程。
Stella981 Stella981
3年前
Egret引擎的常用倒计时
直接上代码,privatetimeControl(){lettimer:egret.Timersegret.Timer(1000);timer.addEventListener(egret.TimerEvent.TIMER,(event:egret.TimerEvent){
Stella981 Stella981
3年前
JavaScript设置倒计时效果
<!DOCTYPEhtml<htmllang"en"<head<metacharset"UTF8"<title倒计时效果</title</head<body<formname"myForm"<inputtype"t
Stella981 Stella981
3年前
Python之yield语法
生成器与yield函数使用yield关键字可以定义生成器对象。生成器是一个函数。它生成一个值的序列,以便在迭代中使用,例如:1defcountdown(n):2print('倒计时:%s'%n)3whilen0:4yieldn5
JXDN JXDN
4个月前
适用于Vue、React、Angular、Ts和Js毫秒级计时器,包括正、倒计时
适用于Vue、React、Angular、Ts和Js毫秒级计时器,包括正、倒计时