概述

毫无疑问,我们先来看下官方文档中给的介绍

CountDownTimer

官方定义如下:

Schedule a countdown until a time in the future, with regular
notifications on intervals along the way.

同时官方也给出了使用的demo:

构造函数 方法 以及参数含义请参考官方文档,已经很明确的说明了,这里就不重复了~

Code


import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;import com.turing.base.R;/*** 倒计时演示* <p/>* Android中有个countDownTimer类,* 从名字上就可以看出来,它的功能是记录下载时间,* 将后台线程的创建和Handler队列封装成为了一个方便的调用.* <p/>* CountDownTimer由系统提供,果断抛弃了自己以前使用Handler更新UI的做法*/
public class CountDownActivity extends AppCompatActivity {private MyCountDownTimer mc;private Button countBtn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_count_down);countBtn = (Button) findViewById(R.id.show);// 共计30S,1S调用一次onTickmc = new MyCountDownTimer(30000, 1000);mc.start();}public void oncancel(View view) {mc.cancel();}public void restart(View view) {mc.start();}/*** 自定义倒计时类*/class MyCountDownTimer extends CountDownTimer {/*** @param millisInFuture    表示以毫秒为单位 倒计时的总数*                          <p/>*                          例如 millisInFuture=1000 表示1秒* @param countDownInterval 表示 间隔 多少微秒 调用一次 onTick 方法*                          <p/>*                          例如: countDownInterval =1000 ;*                          表示每1000毫秒调用一次onTick()*/public MyCountDownTimer(long millisInFuture, long countDownInterval) {super(millisInFuture, countDownInterval);}@Overridepublic void onTick(long millisUntilFinished) {countBtn.setText("倒计时(" + millisUntilFinished / 1000 + ")...");}@Overridepublic void onFinish() {countBtn.setText("done");}}
}

运行图

CountDownTimer源码

/** Copyright (C) 2008 The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**      http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/package android.os;/*** Schedule a countdown until a time in the future, with* regular notifications on intervals along the way.** Example of showing a 30 second countdown in a text field:** <pre class="prettyprint">* new CountDownTimer(30000, 1000) {**     public void onTick(long millisUntilFinished) {*         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);*     }**     public void onFinish() {*         mTextField.setText("done!");*     }*  }.start();* </pre>** The calls to {@link #onTick(long)} are synchronized to this object so that* one call to {@link #onTick(long)} won't ever occur before the previous* callback is complete.  This is only relevant when the implementation of* {@link #onTick(long)} takes an amount of time to execute that is significant* compared to the countdown interval.*/
public abstract class CountDownTimer {/*** Millis since epoch when alarm should stop.*/private final long mMillisInFuture;/*** The interval in millis that the user receives callbacks*/private final long mCountdownInterval;private long mStopTimeInFuture;/*** boolean representing if the timer was cancelled*/private boolean mCancelled = false;/*** @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.*/public CountDownTimer(long millisInFuture, long countDownInterval) {mMillisInFuture = millisInFuture;mCountdownInterval = countDownInterval;}/*** Cancel the countdown.*/public synchronized final void cancel() {mCancelled = true;mHandler.removeMessages(MSG);}/*** Start the countdown.*/public synchronized final CountDownTimer start() {mCancelled = false;if (mMillisInFuture <= 0) {onFinish();return this;}mStopTimeInFuture = SystemClock.elapsedRealtime() + mMillisInFuture;mHandler.sendMessage(mHandler.obtainMessage(MSG));return this;}/*** Callback fired on regular interval.* @param millisUntilFinished The amount of time until finished.*/public abstract void onTick(long millisUntilFinished);/*** Callback fired when the time is up.*/public abstract void onFinish();private static final int MSG = 1;// handles counting downprivate Handler mHandler = new Handler() {@Overridepublic 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 donesendMessageDelayed(obtainMessage(MSG), millisLeft);} else {long lastTickStart = SystemClock.elapsedRealtime();onTick(millisLeft);// take into account user's onTick taking time to executelong delay = lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime();// special case: user's onTick took more than interval to// complete, skip to next intervalwhile (delay < 0) delay += mCountdownInterval;sendMessageDelayed(obtainMessage(MSG), delay);}}}};
}

干货三:CountDownTimer倒计时工具类相关推荐

  1. Android复习14【高级编程:推荐网址、抠图片上的某一角下来、Bitmap引起的OOM问题、三个绘图工具类详解、画线条、Canvas API详解(平移、旋转、缩放、倾斜)、矩阵详解】

    目   录 推荐网址 抠图片上的某一角下来 8.2.2 Bitmap引起的OOM问题 8.3.1 三个绘图工具类详解 画线条 8.3.16 Canvas API详解(Part 1) 1.transla ...

  2. Java中 LocalDate、LocalTime、LocalDateTime三个时间工具类的使用介绍

    Java中 LocalDate.LocalTime.LocalDateTime三个时间工具类的使用介绍 一.背景: 之前在做项目的过程中,对日期时间类没有一个系统的了解,总是在用的时候去搜索一下,解决 ...

  3. Android基础入门教程——8.3.1 三个绘图工具类详解

    Android基础入门教程--8.3.1 三个绘图工具类详解 标签(空格分隔): Android基础入门教程 本节引言: 上两小节我们学习了Drawable以及Bitmap,都是加载好图片的,而本节我 ...

  4. 倒计时工具类:PYContDownManager

    左边是输出台,右边是tableView,点击后modal了一个控制器,停止了计时器 一.主要功能 对于tableViewCell中,总会碰见有多个cell随机计时的问题,于是写了一个工具类. 里面封装 ...

  5. 常用工具类 (三) : Hutool 常用工具类整理 (全)

    文章目录 官方文档 一.基础工具类 StrUtil / StringUtils 字符串工具类 DateUtil 日期工具类 NumberUtil 数字工具类 BeanUtil JavaBean工具类 ...

  6. Android倒计时工具类

    为什么80%的码农都做不了架构师?>>>    原文地址:http://my.oschina.net/reone/blog/710003 多谢touch_ping 的回应.  原来a ...

  7. Android生命周期工具类,Android倒计时工具类

    多谢touch_ping 的回应.  原来api有这个类  android.os.CountDownTimer , 具体实现很下面的差不多. import android.content.Contex ...

  8. 三个绘图工具类详解Paint(画笔)Canvas(画布)Path(路径)

    1)Paint(画笔): 就是画笔,用于设置绘制风格,如:线宽(笔触粗细),颜色,透明度和填充风格等 直接使用无参构造方法 就可以创建Paint实例: Paint paint = new Paint( ...

  9. 三个好用的并发工具类

    转载自  三个好用的并发工具类 以前的文章中,我们介绍了太多的底层原理技术以及新概念,本篇我们轻松点,了解下 Java 并发包下.基于这些底层原理的三个框架工具类. 它们分别是: 信号量 Semaph ...

最新文章

  1. Zookeeper watch机制
  2. 【CVPR2022】双曲图像分割
  3. Python基本类型-列表
  4. 用jackson转json_用Jackson编写大JSON文件
  5. 第4次作业类测试代码 021
  6. 孟小峰:大数据管理系统的发展与机遇
  7. 土地覆盖和土地利用的区别
  8. Linux内核中Netfilter架构介绍
  9. nginx工作原理与配置
  10. Java转Ruby【快速入门】
  11. 论文参考文献格式及意义
  12. 数组分割 java_分割java数组
  13. 1.金融点滴 - 什么是做多、做空?国内股市为什么不能做空?
  14. css中cale()函数的使用
  15. 多巴胺PEG多巴胺,Dopamine-PEG-Dopamine
  16. SolidWorks的二次开发有关的自定义函数
  17. Windows 7 安装最新版 2021-3-1 的 tableau 时提示 “指定程序要求更新的 Windows 版本” 解决办法
  18. 2021年江苏一级计算机报名时间,江苏2021年3月计算机一级报名时间安排
  19. 基于JavaEE的IT威客网站管理系统_JSP网站设计_SqlServer数据库设计
  20. 两片74161实现60进制_74LS161设计60进制计数器-数电课程设计

热门文章

  1. This tutorial code needs the xfeatures2d contrib module to be run.
  2. torch 的 unsqueeze用法
  3. malloc 就是返回开辟内存空间的首地址
  4. 89. Leetcode 96. 不同的二叉搜索树 (动态规划-基础题)
  5. 注意力机制~Attention Mechanism
  6. NTU 课程笔记:CV6422 置信区间
  7. 线性代数笔记:Khatri-Rao积
  8. 文巾解题 182. 查找重复的电子邮箱
  9. 肤色检测算法 - 基于二次多项式混合模型的肤色检测
  10. Matlab并行编程函数cellfun arrayfun