一、三种常用的定时器 
1.Handler类的postDelayed方法:

Handler mHandler = new Handler();Runnable r = new Runnable() {@Overridepublic void run() {//do something//每隔1s循环执行run方法mHandler.postDelayed(this, 1000);}};主线程中调用:  mHandler.postDelayed(r, 100);//延时100毫秒

2.用handler+timer+timeTask方法:

Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {if (msg.what == 1){//do something}super.handleMessage(msg);}};Timer timer = new Timer();TimerTask timerTask = new TimerTask() {@Overridepublic void run() {Message message = new Message();message.what = 1;handler.sendMessage(message);}};主线程中调用:timer.schedule(timerTask,1000,500);//延时1s,每隔500毫秒执行一次run方法

3.Thread+handler方法:

Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {if (msg.what == 1){//do something}super.handleMessage(msg);}};class MyThread extends Thread {//这里也可用Runnable接口实现@Overridepublic void run() {while (true){try {Thread.sleep(1000);//每隔1s执行一次Message msg = new Message();msg.what = 1;handler.sendMessage(msg);} catch (InterruptedException e) {e.printStackTrace();}}}}
主线程中调用:new Thread(new MyThread()).start();

二、三种延时的方法: 
1.Handler的postDelayed方法:

new Handler().postDelayed(new Runnable() {@Overridepublic void run() {//do something}}, 1000);    //延时1s执行

2.timer + TimerTask方法:

timer = new Timer();timer.schedule(new TimerTask() {                   @Overridepublic void run() {//do something}},1000);//延时1s执行

3.Thread方法:

new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(1000);//延时1s//do something} catch (InterruptedException e) {e.printStackTrace();}}}).start();

三、三种定时器:

1.Timer + TimerTask方法

 String sdate = "2019-01-01";SimpleDateFormat sf = new SimpleDateFormat("yy-MM-dd");Date date = sf.parse(sdate);Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("系统正在运行……");}}, date); //在指定的日期运行一次定时任务/*如果date日期在今天之前,则启动定时器后,立即运行一次定时任务run方法*//*如果date日期在今天之后,则启动定时器后,会在指定的将来日期运行一次任务run方法*/

2.Timer+TimerTask方法

String sdate = "2018-02-10";SimpleDateFormat sf = new SimpleDateFormat("yy-MM-dd");Date date = sf.parse(sdate);Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("正在运行……");}}, date, 2000);/*如果指定的date时间是当天或者今天之前,启动定时器后会立即每隔2s运行一次定时器任务*//*如果指定的date时间是未来的某天,启动定时器后会在未来的那天开始,每隔2s执行一次定时器任务*/

四、停止定时器:
停止定时器实质是终止Timer的线程。默认情况下,创建的Timer线程会一直执行,如果要停止的话主要有以下四种方法终止Timer线程:

调用Timer的cancel方法;
把Timer线程设置成Daemon守护线程,当所有的用户线程结束后,那么守护线程也会被终止;
当所有的任务执行结束后,删除对应Timer对象的引用,线程也会被终止;
调用System.exit方法终止程序

1.cancel方法终止Timer线程

/*如果主线程不休眠一段时间,就执行了cancel方法,那么定时器还没来得及执行就会被关闭*/Thread.sleep(5000);timer.cancel();

五、启动定时器源码:

启动一个定时器实质是启动一个线程,每创建一个定时器,就需要新建一个线程,用新创建的线程去执行定时器任务。 
当执行Timer timer = new Timer(); 时,

执行了Timer的无参构造器

public Timer() {this("Timer-" + serialNumber());}

Timer的有参构造器.(设置线程的名字,然后启动线程)

public Timer(String name) {thread.setName(name);thread.start();}

Android中常用计时器,延时,定时相关推荐

  1. android中常用的快捷键

    2019独角兽企业重金招聘Python工程师标准>>> android中常用的快捷键 Eclipse快捷键-方便查找,呵呵,记性不好 行注释/销注释 Ctrl+/  块注释/销注释/ ...

  2. java中链式调用_Java及Android中常用链式调用写法简单示例

    本文实例讲述了Java及Android中常用链式调用写法.分享给大家供大家参考,具体如下: 最近发现,目前大火的许多开源框架中,大多都使用了一种"(方法).(方法).(方法)"的形 ...

  3. java调用android_Java及Android中常用链式调用写法简单示例

    本文实例讲述了Java及Android中常用链式调用写法.分享给大家供大家参考,具体如下: 最近发现,目前大火的许多开源框架中,大多都使用了一种"(方法).(方法).(方法)"的形 ...

  4. Android中常用的加密方式

    Android中常用的加密方式 HmacSHA1 public static String getSignUtil(String key ,String base) {Log.i(TAG, " ...

  5. Android中常用的设计模式

    一:参考文档 先介绍参考文档(或许我们更容易明白):另记录本人可参考 QQ15 MobileSafe 两个Demo 有哪些在实际 Android 项目中用到的设计模式? Android开发中常见的设计 ...

  6. java安卓计时器_如何在android中设置计时器

    通过java.util.Timer和java.util.TimerTask使用计时器的标准Java方法在Android中运行良好,但是你应该知道这个方法创建了一个新线程. 您可以考虑使用非常方便的Ha ...

  7. 【Android 逆向】Android 中常用的 so 动态库 ( /system/lib/libc.so 动态库 | libc++.so 动态库 | libstdc++.so 动态库 )

    文章目录 一.拷贝并分析 Android 中的 /system/lib/libc.so 动态库 二.拷贝并分析 Android 中的 /system/lib/libc++.so 动态库 三.拷贝并分析 ...

  8. Android中常用的设计模式一

    对于开发来说,设计模式是必不可少的,就像是一个项目的架海紫金梁,而且熟悉常用的设计模式可以有助于我们研读源码.好,废话不多说,开始介绍 1> 单例: 不想再说了,如果还有人不会,我叫他大爷. 大 ...

  9. Android中常用的几种字体单位

    有必要弄清楚Android中我们常用的几种字体单位: 1.px(象素):屏幕实际的象素,常说的分辨率1024×768pixels,就是横向1024px,纵向768px:不同设备显示效果相同: 2.in ...

  10. 进阶篇-用户界面:4.Android中常用组件

    1.下拉菜单 在Web开发中,HTML提供了下拉列表的实现,就是使用<select>元素实现一个下拉列表,在其中每个下拉列表项使用<option>表示即可.这是在Web开发中一 ...

最新文章

  1. HBase保存的各个字段意义解释
  2. 搭建ngrok服务器之扩展
  3. python 完全面向对象_python 面向对象(一)
  4. [css] 举例说明常用的cursor取值有哪些?
  5. Telnet 1433端口
  6. idea中查看maven依赖树
  7. Javascript如何深拷贝对象
  8. Unity3D 保姆级安装教程与收费方案和版本、下载地址,看不会算我输
  9. 【转贴】从亚马逊公司的发展看电子商务
  10. swing添加按钮监听后,面板监听失效
  11. 2006 IBM SOA主题会开始座席预定工作
  12. coredns hosts插件
  13. Python爬取京东商品数据
  14. 联通物联卡 显示“已停用”
  15. 一起学英语第三期,things change,people change
  16. Matlab中sym无法使用
  17. linux下修改ext3硬盘为nst,Linux系统备份与恢复
  18. LMS原理推导及代码实现
  19. Linux 环境基础开发工具的使用
  20. 基于Preevision的面向服务架构SOA和以太网通信设计方法

热门文章

  1. 有关access的上机试题_2016年计算机二级《Access》上机操作题及答案
  2. supervisor备忘
  3. iOS网络协议_HTTP/TCP/IP浅析
  4. 【从零开始学习Go语言】一.初识Go语言
  5. autocad ios 虚线_教大家AutoCAD2020怎么画虚线的方法
  6. 华氏温度和摄氏温度的转换-C语言
  7. 【长安的荔枝】读书摘记
  8. LookAhead优化器方法
  9. python调整excel列宽_python - 有没有一种方法可以使用pandas.ExcelWriter自动调整Excel列的宽度? - 堆栈内存溢出...
  10. [大话技术]话聊有趣的23种设计模式