原文:http://blog.csdn.net/wulianghuan/article/details/8507221

在Android开发中,定时器一般有以下3种实现方法:

一、采用Handler与线程的sleep(long)方法
二、采用Handler的postDelayed(Runnable, long)方法
三、采用Handler与timer及TimerTask结合的方法

下面逐一介绍:

一、采用Handle与线程的sleep(long)方法

Handler主要用来处理接受到的消息。这只是最主要的方法,当然Handler里还有其他的方法供实现,有兴趣的可以去查API,这里不过多解释。

1. 定义一个Handler类,用于处理接受到的Message。

?
1
2
3
4
5
6
Handler handler = new Handler() {
    public void handleMessage(Message msg) {
        // 要做的事情
        super.handleMessage(msg);
    }
};

2. 新建一个实现Runnable接口的线程类,如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class MyThread implements Runnable {
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while (true) {
            try {
                Thread.sleep(10000);// 线程暂停10秒,单位毫秒
                Message message = new Message();
                message.what = 1;
                handler.sendMessage(message);// 发送消息
            catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

3. 在需要启动线程的地方加入下面语句:

?
1
new Thread(new MyThread()).start();

4. 启动线程后,线程每10s发送一次消息。

二、采用Handler的postDelayed(Runnable, long)方法

这个实现比较简单一些。

1. 定义一个Handler类

?
1
2
3
4
5
6
7
8
9
Handler handler=new Handler();
Runnable runnable=new Runnable() {
    @Override
    public void run() {
        // TODO Auto-generated method stub
        //要做的事情
        handler.postDelayed(this2000);
    }
};

2. 启动计时器

?
1
handler.postDelayed(runnable, 2000);//每两秒执行一次runnable.

3. 停止计时器

?
1
handler.removeCallbacks(runnable);

三、采用Handler与timer及TimerTask结合的方法

1. 定义定时器、定时器任务及Handler句柄

?
1
2
3
4
5
6
7
8
9
10
private final Timer timer = new Timer();
private TimerTask task;
Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        // TODO Auto-generated method stub
        // 要做的事情
        super.handleMessage(msg);
    }
};

2. 初始化计时器任务

?
1
2
3
4
5
6
7
8
9
task = new TimerTask() {
    @Override
    public void run() {
        // TODO Auto-generated method stub
        Message message = new Message();
        message.what = 1;
        handler.sendMessage(message);
    }
};

3. 启动定时器

?
1
timer.schedule(task, 20002000);

简要说一下上面三步提到的一些内容:

1. 定时器任务(TimerTask)顾名思义,就是说当定时器到达指定的时间时要做的工作,这里是想Handler发送一个消息,由Handler类进行处理。

2. java.util.Timer.schedule(TimerTask task, long delay):这个方法是说,dalay/1000秒后执行task.只执行一次。
java.util.Timer.schedule(TimerTask task, long delay, long period):这个方法是说,delay/1000秒后执行task,然后进过period/1000秒再次执行task,这个用于循环任务,执行无数次,当然,你可以用timer.cancel();取消计时器的执行。

Android中定时器的3种实现方法相关推荐

  1. 【转】Android中定时器的3种实现方法

    原文网址:http://www.android-study.com/pingtaikaifa/508.html 在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与线程的s ...

  2. android 开启一个定时线程_Android中定时执行任务的3种实现方法

    在android中,有主线程和子线程,子线程不能操作ui进行更改,目前我们不考虑ui问题和线程通信问题,一起跟着爱站技术频道小编的步伐来了解Android中定时执行任务的3种实现方法. 在Androi ...

  3. android 实现毫秒定时器,Android实现定时器的五种方法实例详解

    一.Timer Timer是Android直接启动定时器的类,TimerTask是一个子线程,方便处理一些比较复杂耗时的功能逻辑,经常与handler结合使用. 跟handler自身实现的定时器相比, ...

  4. android 使用 系统字体,Android_解析Android中使用自定义字体的实现方法,1、Android系统默认支持三种字 - phpStudy...

    解析Android中使用自定义字体的实现方法 1.Android系统默认支持三种字体,分别为:"sans", "serif", "monospace ...

  5. Android解析xml的方法,Android中解析XML格式数据的方法

    XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...

  6. Android中对图片的内存优化方法

    Android 中对于图片的内存优化方法 1. 对图片本身进行操作 尽量不要使用 setImageBitmap.setImageResource.BitmapFactory.decodeResourc ...

  7. Android中XML的三种解析器分析、实战

    XML解析器介绍 Android中提供了三种方式来解析XML: SAX(simple API for XML) DOM(文档对象模型) 以及Android内部使用的Pull解析. SAX(simple ...

  8. Android中保存图片的两种方式

    Android中保存图片的两种方式 第一种是保存到数据库: 1.保存到数据库: 2.从数据库读取: 二是以图片格式保存到本地 1. A.声明tempFile以保存到指定路径: B.保存到tempFil ...

  9. python隐藏部分代码_python隐藏类中属性的3种实现方法

    方法一: 效果图一: 代码一: # 定义一个矩形的类 class Rectangle: # 定义初始化方法 def __init__(self,width,height): self.hidden_w ...

最新文章

  1. sql服务器登录名为电脑名如何修改,如何恢复数据库的账号 登录名/用户名等
  2. 在java中方法重载的要求,Java方法的重载
  3. onvif_discover虚拟摄像头
  4. oracle如何在本地建库,oracle在本地建库
  5. select报错 spark_spark-sql master on yarn 模式运行 select count(*) 报错日志
  6. Linux重要的热键[Tab]、[Ctrl]-c、[Ctrl]-d介绍
  7. 1.13单用户模式 1.14 救援模式 1.15 克隆虚拟机 1.16 Linux机器相互登录
  8. 7-26 币值转换 (20 分)
  9. Java国际手机号正则校验
  10. html5判断文字超过几行,判断文字数量超过2行 添加展开按钮 未超过两行则不显示按钮 溢出部分显示省略号...
  11. 高防服务器的机房硬件防火墙类型和主要功能
  12. 编写一个程序,完成字符大小写的转换。
  13. 用Dockerfile构建MySQL镜像并实现容器启动过程中MySQL数据库系统的初始化
  14. VUE酒店日期选择,时间段选择插件vue-mobile-calendar使用
  15. 用python画路飞代码_python 全栈开发,Day105(路飞其他数据库表结构,立即结算需求)...
  16. Win10系统安装CUDA10.0和cuDNN
  17. 计算机视觉领域的发展趋势
  18. 基于MSF框架下的kiwi模块制作黄金票据
  19. 2015年12月7日
  20. Cesium天际线分析

热门文章

  1. linux上搭载was应用上传中文文件,受支持的Linux操作系统和WAS ND 9.0安装部署文档的资料说明...
  2. appium python 抓包_Python学习教程:另辟蹊径,appium抓取app应用数据了解一下
  3. python代码规范方面的书_你写的Python代码规范吗?
  4. mysql8.0. linux二进制_linux下安装mysql8.0(二进制方式)
  5. ajax获取cpu的占用率,JavaScript获取当前cpu使用率的方法
  6. android退出图标按钮,android-setCloseButtonIcon(位图可绘制)不适用于...
  7. 简述linux开机启动进程,Linux系统启动流程简述
  8. 旋转校正原理_【干货】全站仪水准器的检校原理及方法,值得学习!
  9. xfce上安装mysql_在Fedora 33/32系统上安装PostgreSQL 13数据库的说明
  10. 北斗三号频点_海格通信发布国内首批北斗三号双模应用专用芯片及系统解决方案,对外展示“北斗+5G”的关键成果转化...