countdown倒计时安卓软件_倒计时工具

countdown倒计时安卓软件_倒计时工具CountDownTimer是Android官方SDK提供的一个倒计时工具,其仍然是基于Handlersend/postdelay,可视作在倒计时这个特定的使用场景下对于Handler的一种封装。用法CountDownTimer使用起来是很方便的。CountDownTimer是一个抽象类,通过构造方法创建实例,并且实现两个抽象方法即可。start()方法为启动倒计时。CountDownTime…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

CountDownTimer是Android官方SDK提供的一个倒计时工具,其仍然是基于Handler send/post delay,可视作在倒计时这个特定的使用场景下对于Handler的一种封装。

用法

CountDownTimer使用起来是很方便的。CountDownTimer是一个抽象类,通过构造方法创建实例,并且实现两个抽象方法即可。start()方法为启动倒计时。

CountDownTimer countDownTimer = new CountDownTimer(1000L * 30, 1000L) {
            @Override
            public void onTick(long millisUntilFinished) {
                // your logic for tick
            }

            @Override
            public void onFinish() {
                // your logic for finish
            }
        };
        countDownTimer.start();

构造方法的两个参数均以毫秒为单位,第一个是倒计时总时长,第二个是收到tick回调的时间周期。上述例子中即倒计时30s,每1s一次tick。构造方法的两个参数说明:

    /**
     * @param millisInFuture The number of millis in the future from the call
     *   to {@link #start()} until the countdown is done and {@link #onFinish()}
     *   is called.
     * @param countDownInterval The interval along the way to receive
     *   {@link #onTick(long)} callbacks.
     */

主线程中使用

值得注意的是,CountDownTimer可以在主线程中直接使用。验证一下回调的执行线程。在主线程中执行如下代码:

CountDownTimer countDownTimer = new CountDownTimer(1000L * 30, 1000L) {
            @Override
            public void onTick(long millisUntilFinished) {
                // your logic for tick
                Log.i("TEST", "onTick - " + Thread.currentThread() + ", id - " + Thread.currentThread().getId());
            }

            @Override
            public void onFinish() {
                // your logic for finish

                Log.i("TEST", "onFinish" + Thread.currentThread() + ", id - " + Thread.currentThread().getId());
            }
        };
        countDownTimer.start();

Log:

02-24 14:05:13.545 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:14.546 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:15.548 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:16.550 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:17.551 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:18.553 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:19.555 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:20.557 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:21.560 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:22.563 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:23.566 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:24.569 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:25.571 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:26.573 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:27.575 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:28.578 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:29.580 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:30.581 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:31.583 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:32.586 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:33.588 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:34.589 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:35.592 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:36.595 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:37.598 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:38.599 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:39.601 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:40.602 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:41.604 30358 30358 I TEST    : onTick - Thread[main,5,main], id - 1
02-24 14:05:43.546 30358 30358 I TEST    : onFinishThread[main,5,main], id - 1

可见,回调执行在主线程,这也就意味着可以在回调中直接处理UI,还是很方便的。

在工作线程中使用

不能在工作线程中像主线程一样简单使用的原因,是CountDownTimer是基于Handler的,细节将在原理部分说明。主线程已经由安卓框架层启动了消息循环,所以可以直接使用。那么在工作线程中怎样使用呢?可以借助于HanderThread。在onLooperPrepared()中初始化并开启CountDownTimer:

        new HandlerThread("TestThread") {
            protected void onLooperPrepared() {
                CountDownTimer countDownTimer = new CountDownTimer(1000L * 30, 1000L) {
                    @Override
                    public void onTick(long millisUntilFinished) {
                        // your logic for tick
                        Log.i("TEST", "onTick - " + Thread.currentThread() + ", id - " + Thread.currentThread().getId());
                    }

                    @Override
                    public void onFinish() {
                        // your logic for finish
                        Log.i("TEST", "onFinish" + Thread.currentThread() + ", id - " + Thread.currentThread().getId());
                    }
                };
                countDownTimer.start();
            }
        }.start();

执行log如下:

02-24 14:03:35.789 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:36.790 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:37.793 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:38.795 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:39.797 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:40.800 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:41.801 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:42.803 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:43.804 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:44.806 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:45.809 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:46.810 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:47.813 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:48.814 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:49.816 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:50.818 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:51.820 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:52.821 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:53.823 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:54.825 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:55.827 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:56.828 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:57.829 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:58.831 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:03:59.832 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:04:00.835 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:04:01.836 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:04:02.838 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:04:03.840 30099 30222 I TEST    : onTick - Thread[TestThread,5,main], id - 473
02-24 14:04:05.791 30099 30222 I TEST    : onFinishThread[TestThread,5,main], id - 473

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192767.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 独立样本与配对样本t检验

    独立样本与配对样本t检验spss操作全力推荐医咖会这个医学网站,上面讲解非常齐全,下附链接:https://www.mediecogroup.com组间均值是否存在差异,使用t检验独立样本t检验1、需满足条件①、数据满足独立性、②、样本均数服从正态分布、③、两个总体方差齐,可选用两个样本均数比较的t检验2、进行判断①、逻辑上判断是否满足独立,②、数据量比较大时,一般可认为数据满足正态分布③、方差齐次…

    2022年6月19日
    31
  • spring aop实例讲解_java swing 教程

    spring aop实例讲解_java swing 教程1.SpringAOP是什么?AspectOrientedProgramming:面向切面编程什么时候会出现面向切面编程的需求?按照软件重构的思想,如果多个类中出现重复的代码,就应该考虑定义一个共同的抽象类,将这些共同的代码提取到抽象类中,比如Teacher,Student都有username,那么就可以把username及相关的get、set方法抽取到SysUser中,这种情况,我们称…

    2022年8月11日
    2
  • js的6种数据类型_主要的数据类型

    js的6种数据类型_主要的数据类型JS常用的六种数据类型在JS中一共有九种数据类型,有六种基本数据类型,分别是:String(字符串)、Number(数值)、Boolean(布尔值)、Null(空值)、Undefined(未定义)、Object(对象)String字符串在JS中字符串需要使用引号引起来使用双引号或单引号都行,但是不要混着用引号不能嵌套,双引号不能放双引号,单引号不能放单引号在字符串中我们可以使用\作为转义字符,当表示一些特殊符号是可以使用\进行转义\“表示”、\‘表示’、\n表示换行、\t制表符

    2025年9月20日
    5
  • SPSS-聚类分析[通俗易懂]

    SPSS-聚类分析[通俗易懂]聚类分析(层次聚类分析(Q型聚类和R型聚类)、快速聚类分析)聚类分析的实质:是建立一种分类方法,它能够将一批样本数据按照他们在性质上的亲密程度在没有先验知识的情况下自动进行分类。这里所说的类就是一个具有相似性的个体的集合,不同类之间具有明显的区别。聚类分析的特点:聚类分析是一种探索性的分析,在分类的过程中,人们不必事先给出一个分类的标准,聚类分析能够从样本数据出发,自动进行分类。1.层次…

    2022年10月18日
    2
  • Pytest(1)安装与入门「建议收藏」

    Pytest(1)安装与入门「建议收藏」pytest介绍pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它

    2022年7月30日
    7
  • 单周期CPU中的指令周期就是一个时钟周期_指令周期和时钟周期的关系

    单周期CPU中的指令周期就是一个时钟周期_指令周期和时钟周期的关系指令周期: CPU每取出并执行一条指令所需的全部时间叫指令周期,也即CPU完成一条指令的时间叫指令周期一般一条完整的指令包括:取指周期、间址周期、执行周期、中断周期。JMPX:该指令的指令周期只有取指周期。ADDX:该指令只有取指周期、执行周期。一个指令周期包含的机器周期个数亦与指令所要求的动作有关,如单操作数指令,只需要一个取操作数周期,而双操作数指令需要两个取操作数周期。实…

    2022年10月13日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号