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的用法及原理的更多相关文章

  1. imadjust从用法到原理—Matlab灰度变换函数之一

    imadjust从用法到原理-Matlab灰度变换函数之一 转摘网址:http://blog.sina.com.cn/s/blog_14d1511ee0102ww6s.html imadjust函数是 ...

  2. Python 中 -m 的典型用法、原理解析与发展演变

    在命令行中使用 Python 时,它可以接收大约 20 个选项(option),语法格式如下: python [-bBdEhiIOqsSuvVWx?] [-c command | -m module- ...

  3. synchronized是什么,用法及原理

    文章转Hollis博客 大家可以关注下,很多技术类型的文章 在再有人问你Java内存模型是什么,就把这篇文章发给他.中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提 ...

  4. Java之反射 — 用法及原理

    Java之反射 - 用法及原理 定义 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象 ...

  5. java this的用法以及原理

    /** * this存在方法中,在方法中被调用. * 且是非static方法中被调用.(this 表示这个类的当前实例,而静态方法不依赖于该类的任何实例,随着类产生而装载,因此方法内不能引用 this ...

  6. webpack基本用法及原理(10000+)

    1 webpack是什么 所有工具的出现,都是为了解决特定的问题,那么前端熟悉的webpack是为了解决什么问题呢? 1.1 为什么会出现webpack js模块化: 浏览器认识的语言是HTML,CS ...

  7. ASP.NET Core MVC 模型绑定用法及原理

    前言 查询了一下关于 MVC 中的模型绑定,大部分都是关于如何使用的,以及模型绑定过程中的一些用法和概念,很少有关于模型绑定的内部机制实现的文章,本文就来讲解一下在 ASP.NET Core MVC ...

  8. Linux常用性能工具功能、用法及原理(一)

    Linux性能观测工具按类别可分为系统级别和进程级别,系统级别对整个系统的性能做统计,而进程级别则具体到进程,为每个进程维护统计信息. 按实现原理分,可分为基于计数器和跟踪以及剖析.含义如下: 计数器 ...

  9. Spark SQL入门用法与原理分析

    Spark SQL是为了让开发人员摆脱自己编写RDD等原生Spark代码而产生的,开发人员只需要写一句SQL语句或者调用API,就能生成(翻译成)对应的SparkJob代码并去执行,开发变得更简洁 注 ...

随机推荐

  1. [BJOI2014]大融合(LCT)

    题面 luogu bzoj是权限题.. 题解 \(LCT\)维护子树信息 因为\(LCT\)中有一些虚子树,\(splay\)维护不了. 所以要新开一个数组来记录 然后注意\(link\)时 是先\( ...

  2. Numpy:np.vstack()&np.hstack() flat/flatten

    一 .  np.vstack: 按垂直方向(行顺序)堆叠数组构成一个新的数组 In[3]: import numpy as np In[4]: a = np.array([[1,2,3]]) a.sh ...

  3. (转)基于OpenStack构建企业私有云(1)实验环境准备

    原文:https://www.unixhot.com/article/407 https://www.cnblogs.com/kevingrace/p/5707003.html-----完整部署Cen ...

  4. ZendStudio操作技巧

    1.恢复窗口默认布局 点开菜单栏上的“windows”,出来的菜单中有个“Reset Perspective...”,点这个就行了

  5. Spring Boot的Controller控制层和页面

    一.项目实例 1.项目结构 2.项目代码 1).ActionController.Java: package com.example.controller; import java.util.Date ...

  6. TortoiseGit学习系列之Windows上本地代码如何通过TortoiserGit提交到GitHub详解(图文)

    不多说,直接上干货! 前面博客 TortoiseGit学习系列之Windows上TortoiseGit的安装详解(图文) 上面博文给大家讲解了一下如何本地安装TortoiseGit. 这篇为大家讲一下 ...

  7. javascript中数组的方法你真的都了解吗?

    本篇文章主要讲述ES5中的数组,包括数组两种创建方式,属性,以及 9 大类 ,总共23个操作方法,非常全面,看完之后ES5数组这一部分基本都了解了,下一篇文章,我会讲述ES6中对数组的加成,新增了哪些 ...

  8. 深入理解java集合框架之---------LinkedList

    日常开发中,保存一组数据使用的最多的就是 ArrayList, 其次就是 LinkedList 了. 我们知道 ArrayList 是以数组实现的,遍历时很快,但是插入.删除时都需要移动后面的元素,效 ...

  9. System.Transactions事务超时设置

    System.Transactions 有2个超时属性(timeout 与 maxTimeout),可以通过配置文件来进行设置. 1. timeout System.Transactions 默认的t ...

  10. Tomcat源码分析——Session管理分析(下)

    前言 在<TOMCAT源码分析——SESSION管理分析(上)>一文中我介绍了Session.Session管理器,还以StandardManager为例介绍了Session管理器的初始化 ...