Android中定时器的3种实现方法
原文: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( this , 2000 );
}
};
|
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, 2000 , 2000 );
|
简要说一下上面三步提到的一些内容:
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种实现方法相关推荐
- 【转】Android中定时器的3种实现方法
原文网址:http://www.android-study.com/pingtaikaifa/508.html 在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与线程的s ...
- android 开启一个定时线程_Android中定时执行任务的3种实现方法
在android中,有主线程和子线程,子线程不能操作ui进行更改,目前我们不考虑ui问题和线程通信问题,一起跟着爱站技术频道小编的步伐来了解Android中定时执行任务的3种实现方法. 在Androi ...
- android 实现毫秒定时器,Android实现定时器的五种方法实例详解
一.Timer Timer是Android直接启动定时器的类,TimerTask是一个子线程,方便处理一些比较复杂耗时的功能逻辑,经常与handler结合使用. 跟handler自身实现的定时器相比, ...
- android 使用 系统字体,Android_解析Android中使用自定义字体的实现方法,1、Android系统默认支持三种字 - phpStudy...
解析Android中使用自定义字体的实现方法 1.Android系统默认支持三种字体,分别为:"sans", "serif", "monospace ...
- Android解析xml的方法,Android中解析XML格式数据的方法
XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...
- Android中对图片的内存优化方法
Android 中对于图片的内存优化方法 1. 对图片本身进行操作 尽量不要使用 setImageBitmap.setImageResource.BitmapFactory.decodeResourc ...
- Android中XML的三种解析器分析、实战
XML解析器介绍 Android中提供了三种方式来解析XML: SAX(simple API for XML) DOM(文档对象模型) 以及Android内部使用的Pull解析. SAX(simple ...
- Android中保存图片的两种方式
Android中保存图片的两种方式 第一种是保存到数据库: 1.保存到数据库: 2.从数据库读取: 二是以图片格式保存到本地 1. A.声明tempFile以保存到指定路径: B.保存到tempFil ...
- python隐藏部分代码_python隐藏类中属性的3种实现方法
方法一: 效果图一: 代码一: # 定义一个矩形的类 class Rectangle: # 定义初始化方法 def __init__(self,width,height): self.hidden_w ...
最新文章
- sql服务器登录名为电脑名如何修改,如何恢复数据库的账号 登录名/用户名等
- 在java中方法重载的要求,Java方法的重载
- onvif_discover虚拟摄像头
- oracle如何在本地建库,oracle在本地建库
- select报错 spark_spark-sql master on yarn 模式运行 select count(*) 报错日志
- Linux重要的热键[Tab]、[Ctrl]-c、[Ctrl]-d介绍
- 1.13单用户模式 1.14 救援模式 1.15 克隆虚拟机 1.16 Linux机器相互登录
- 7-26 币值转换 (20 分)
- Java国际手机号正则校验
- html5判断文字超过几行,判断文字数量超过2行 添加展开按钮 未超过两行则不显示按钮 溢出部分显示省略号...
- 高防服务器的机房硬件防火墙类型和主要功能
- 编写一个程序,完成字符大小写的转换。
- 用Dockerfile构建MySQL镜像并实现容器启动过程中MySQL数据库系统的初始化
- VUE酒店日期选择,时间段选择插件vue-mobile-calendar使用
- 用python画路飞代码_python 全栈开发,Day105(路飞其他数据库表结构,立即结算需求)...
- Win10系统安装CUDA10.0和cuDNN
- 计算机视觉领域的发展趋势
- 基于MSF框架下的kiwi模块制作黄金票据
- 2015年12月7日
- Cesium天际线分析
热门文章
- linux上搭载was应用上传中文文件,受支持的Linux操作系统和WAS ND 9.0安装部署文档的资料说明...
- appium python 抓包_Python学习教程:另辟蹊径,appium抓取app应用数据了解一下
- python代码规范方面的书_你写的Python代码规范吗?
- mysql8.0. linux二进制_linux下安装mysql8.0(二进制方式)
- ajax获取cpu的占用率,JavaScript获取当前cpu使用率的方法
- android退出图标按钮,android-setCloseButtonIcon(位图可绘制)不适用于...
- 简述linux开机启动进程,Linux系统启动流程简述
- 旋转校正原理_【干货】全站仪水准器的检校原理及方法,值得学习!
- xfce上安装mysql_在Fedora 33/32系统上安装PostgreSQL 13数据库的说明
- 北斗三号频点_海格通信发布国内首批北斗三号双模应用专用芯片及系统解决方案,对外展示“北斗+5G”的关键成果转化...