CountDownTimer的用法及原理
1.主线程中使用
值得注意的是,CountDownTimer可以在主线程中直接使用。验证一下回调的执行线程。在主线程中执行如下代码
CountDownTimer countDownTimer = new CountDownTimer(1000L * , 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:
- ::13.545 I TEST : onTick - Thread[main,,main], id -
- ::14.546 I TEST : onTick - Thread[main,,main], id -
- ::15.548 I TEST : onTick - Thread[main,,main], id -
- ::16.550 I TEST : onTick - Thread[main,,main], id -
- ::17.551 I TEST : onTick - Thread[main,,main], id -
- ::18.553 I TEST : onTick - Thread[main,,main], id -
- ::19.555 I TEST : onTick - Thread[main,,main], id -
- ::20.557 I TEST : onTick - Thread[main,,main], id -
- ::21.560 I TEST : onTick - Thread[main,,main], id -
- ::22.563 I TEST : onTick - Thread[main,,main], id -
- ::23.566 I TEST : onTick - Thread[main,,main], id -
- ::24.569 I TEST : onTick - Thread[main,,main], id -
- ::25.571 I TEST : onTick - Thread[main,,main], id -
- ::26.573 I TEST : onTick - Thread[main,,main], id -
- ::27.575 I TEST : onTick - Thread[main,,main], id -
- ::28.578 I TEST : onTick - Thread[main,,main], id -
- ::29.580 I TEST : onTick - Thread[main,,main], id -
- ::30.581 I TEST : onTick - Thread[main,,main], id -
- ::31.583 I TEST : onTick - Thread[main,,main], id -
- ::32.586 I TEST : onTick - Thread[main,,main], id -
- ::33.588 I TEST : onTick - Thread[main,,main], id -
- ::34.589 I TEST : onTick - Thread[main,,main], id -
- ::35.592 I TEST : onTick - Thread[main,,main], id -
- ::36.595 I TEST : onTick - Thread[main,,main], id -
- ::37.598 I TEST : onTick - Thread[main,,main], id -
- ::38.599 I TEST : onTick - Thread[main,,main], id -
- ::39.601 I TEST : onTick - Thread[main,,main], id -
- ::40.602 I TEST : onTick - Thread[main,,main], id -
- ::41.604 I TEST : onTick - Thread[main,,main], id -
- ::43.546 I TEST : onFinishThread[main,,main], id -
可见,回调执行在主线程,这也就意味着可以在回调中直接处理UI,还是很方便的。
2.在工作线程中使用
不能在工作线程中像主线程一样简单使用的原因,是CountDownTimer是基于Handler的,细节将在原理部分说明。主线程已经由安卓框架层启动了消息循环,所以可以直接使用。那么在工作线程中怎样使用呢?可以借助于HanderThread。在onLooperPrepared()中初始化并开启CountDownTimer:
new HandlerThread("TestThread") {
protected void onLooperPrepared() {
CountDownTimer countDownTimer = new CountDownTimer(1000L * , 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如下:
- ::35.789 I TEST : onTick - Thread[TestThread,,main], id -
- ::36.790 I TEST : onTick - Thread[TestThread,,main], id -
- ::37.793 I TEST : onTick - Thread[TestThread,,main], id -
- ::38.795 I TEST : onTick - Thread[TestThread,,main], id -
- ::39.797 I TEST : onTick - Thread[TestThread,,main], id -
- ::40.800 I TEST : onTick - Thread[TestThread,,main], id -
- ::41.801 I TEST : onTick - Thread[TestThread,,main], id -
- ::42.803 I TEST : onTick - Thread[TestThread,,main], id -
- ::43.804 I TEST : onTick - Thread[TestThread,,main], id -
- ::44.806 I TEST : onTick - Thread[TestThread,,main], id -
- ::45.809 I TEST : onTick - Thread[TestThread,,main], id -
- ::46.810 I TEST : onTick - Thread[TestThread,,main], id -
- ::47.813 I TEST : onTick - Thread[TestThread,,main], id -
- ::48.814 I TEST : onTick - Thread[TestThread,,main], id -
- ::49.816 I TEST : onTick - Thread[TestThread,,main], id -
- ::50.818 I TEST : onTick - Thread[TestThread,,main], id -
- ::51.820 I TEST : onTick - Thread[TestThread,,main], id -
- ::52.821 I TEST : onTick - Thread[TestThread,,main], id -
- ::53.823 I TEST : onTick - Thread[TestThread,,main], id -
- ::54.825 I TEST : onTick - Thread[TestThread,,main], id -
- ::55.827 I TEST : onTick - Thread[TestThread,,main], id -
- ::56.828 I TEST : onTick - Thread[TestThread,,main], id -
- ::57.829 I TEST : onTick - Thread[TestThread,,main], id -
- ::58.831 I TEST : onTick - Thread[TestThread,,main], id -
- ::59.832 I TEST : onTick - Thread[TestThread,,main], id -
- ::00.835 I TEST : onTick - Thread[TestThread,,main], id -
- ::01.836 I TEST : onTick - Thread[TestThread,,main], id -
- ::02.838 I TEST : onTick - Thread[TestThread,,main], id -
- ::03.840 I TEST : onTick - Thread[TestThread,,main], id -
- ::05.791 I TEST : onFinishThread[TestThread,,main], id -
CountDownTimer的用法及原理的更多相关文章
- imadjust从用法到原理—Matlab灰度变换函数之一
imadjust从用法到原理-Matlab灰度变换函数之一 转摘网址:http://blog.sina.com.cn/s/blog_14d1511ee0102ww6s.html imadjust函数是 ...
- Python 中 -m 的典型用法、原理解析与发展演变
在命令行中使用 Python 时,它可以接收大约 20 个选项(option),语法格式如下: python [-bBdEhiIOqsSuvVWx?] [-c command | -m module- ...
- synchronized是什么,用法及原理
文章转Hollis博客 大家可以关注下,很多技术类型的文章 在再有人问你Java内存模型是什么,就把这篇文章发给他.中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提 ...
- Java之反射 — 用法及原理
Java之反射 - 用法及原理 定义 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象 ...
- java this的用法以及原理
/** * this存在方法中,在方法中被调用. * 且是非static方法中被调用.(this 表示这个类的当前实例,而静态方法不依赖于该类的任何实例,随着类产生而装载,因此方法内不能引用 this ...
- webpack基本用法及原理(10000+)
1 webpack是什么 所有工具的出现,都是为了解决特定的问题,那么前端熟悉的webpack是为了解决什么问题呢? 1.1 为什么会出现webpack js模块化: 浏览器认识的语言是HTML,CS ...
- ASP.NET Core MVC 模型绑定用法及原理
前言 查询了一下关于 MVC 中的模型绑定,大部分都是关于如何使用的,以及模型绑定过程中的一些用法和概念,很少有关于模型绑定的内部机制实现的文章,本文就来讲解一下在 ASP.NET Core MVC ...
- Linux常用性能工具功能、用法及原理(一)
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别对整个系统的性能做统计,而进程级别则具体到进程,为每个进程维护统计信息. 按实现原理分,可分为基于计数器和跟踪以及剖析.含义如下: 计数器 ...
- Spark SQL入门用法与原理分析
Spark SQL是为了让开发人员摆脱自己编写RDD等原生Spark代码而产生的,开发人员只需要写一句SQL语句或者调用API,就能生成(翻译成)对应的SparkJob代码并去执行,开发变得更简洁 注 ...
随机推荐
- Django分页的实现
Django分页的实现 Django ORM 分页介绍 分页是网页浏览中常见到的一种形式,在数据量较大时,一个页面显示不全,采取分割数据由用户选择进行显示的方式. 基本实现 技术点 通过切片得到数据 ...
- thinkphp5.0 CURL用post请求接口数据
//测试 请求接口 public function index(){ $arr = array('a'=>'555','b'=>56454564); $data=$this->pos ...
- CodeForces - 556C-Case of Matryoshkas(思维)
Andrewid the Android is a galaxy-famous detective. He is now investigating the case of vandalism at ...
- (热死你)Resin https ssl Linux 配置,实战可用
(热死你)Resin https ssl Linux 配置,实战可用 一.配置resin 1.在resin服务器中创建目录keys文件和openssl.conf,格式内容如下: #先复制以下的内容: ...
- jQuery事件之传递参数
一.jQuery绑定事件的三种方法 我们这里首先复习一下jQuery绑定事件的三种方法: target.click(function(){}); target.on("click" ...
- javascript语言使用技巧及注意事项总结
1.首次为变量赋值时务必使用var关键字 变量没有声明而直接赋值得话,默认会作为一个新的全局变量,要尽量避免使用全局变量. var a=b=10;//其中a是局部变量,b是全局变量 2.使用===比= ...
- js继承的实现(es5)
js对面向对象的支持很弱,所以在ES6之前实现继承会绕比较多的弯(类似于对面向对象支持弱,然后强行拼凑面向对象的特性) es5中实现继承的几种方式,父类定义为Super function Super( ...
- JavaScript设计模式-12.门面模式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- unity 优化之overdraw查看
scene视图里面能直接看,打开左上角那个下拉选项,选择overdraw就行 转载篇在game视图下查看overdraw: https://blog.csdn.net/complicate ...
- Java SE 基础知识
常量: 常量是一种标识符,它的值在运行期间恒定不变,并且常量在程序中只能被引用,而不能被重新赋值. 常量的命名规则: 1.在 Java 中,在变量声明中加入 final 关键字代表常量,加入 stat ...