Android中定时器的3种实现方法
原文:http://blog.csdn.net/wulianghuan/article/details/8507221
一、采用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 
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中定时执行任务的3种实现方法
		
在Android开发中,定时执行任务的3种实现方法: 一.采用Handler与线程的sleep(long)方法(不建议使用,java的实现方式)二.采用Handler的postDelayed(Runn ...
 - Android中Button的五种监听事件
		
简单聊一下Android中Button的五种监听事件: 1.在布局文件中为button添加onClick属性,Activity实现其方法2.匿名内部类作为事件监听器类3.内部类作为监听器4.Activ ...
 - Android中View的绘制过程 onMeasure方法简述 附有自定义View例子
		
Android中View的绘制过程 onMeasure方法简述 附有自定义View例子 Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android fr ...
 - Android中解析XML格式数据的方法
		
XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...
 - Android 中对于图片的内存优化方法
		
Android 中对于图片的内存优化方法,需要的朋友可以参考一下 1. 对图片本身进行操作 尽量不要使用 setImageBitmap.setImageResource. BitmapFact ...
 - Jquery中each的三种遍历方法
		
Jquery中each的三种遍历方法 $.post("urladdr", { "data" : "data" }, function(dat ...
 - 【转】Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)
		
原文网址:http://www.blogjava.net/anchor110/articles/355699.html 1.在工程下新建lib文件夹,将需要的第三方包拷贝进来.2.将引用的第三方包,添 ...
 - qt qml中PropertyAnimation的几种使用方法
		
qml文章 qt qml中PropertyAnimation的几种使用方法 动画应用场景有以下几种: 首先如果一个Rectangle.动画是要改变它的x和y值 1,Rectangle一旦被创建,就要移 ...
 
随机推荐
- 根据block取出space_id
			
/*********************************************************************//** Gets the space id of a bl ...
 - Json.net 同过 JsonConverter 调整导出值(未完成)
			
public class TimeSpanConverter : JsonConverter { public override bool CanConvert(Type objectType) { ...
 - bzoj1426
			
偷个懒,转自hzwer [“这种煞笔题怎么总有人问”,被吧主D了... 用f[i]表示已经拥有了i张邮票,则期望还需要购买的邮票数 则f[n]=0 f[i]=f[i]*(i/n)+f[i+1]*((n ...
 - UVa 11082 (网络流建模) Matrix Decompressing
			
网络流不难写,难的建一个能解决问题的模型.. 即使我知道这是网络流专题的题目,也绝不会能想出这种解法,=_=|| 题意: 给出一个矩阵的 前i行和 以及 前i列和,然后找到一个满足要求的矩阵,而且每个 ...
 - poj 2185 (KMP)
			
完全不会啊…… 附一份题解:http://blog.sina.com.cn/s/blog_69c3f0410100tyjl.html var i,j,k,r,c,x:longint; ch:..,.. ...
 - NOI2002银河英雄传说
			
原先就看过这道题,觉得很复杂. 不知道为什么今天一看觉得好水啊…… 难道这就是并查集的启发式合并? 数组d[i]表示i到其父节点的距离,即中间隔了多少船舰. 数组sum[i]记录以i为根的集合总共有多 ...
 - 【转】iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)-- 不错
			
原文网址:http://www.cnblogs.com/JuneWang/p/3850859.html iOS页面间传值的方式(NSUserDefault/Delegate/NSNotificatio ...
 - HDU 5313  Bipartite Graph
			
题意:给一个二分图,问想让二分图变成完全二分图最多能加多少条边. 解法:图染色+dp+bitset优化.设最终的完全二分图两部分点集为A和B,A中点个数为x,B中点个数为y,边数则为x × y,答案即 ...
 - (Android Studio)添加按钮以及权重问题
			
此文大部分摘自http://hukai.me/android-training-course-in-chinese/basics/firstapp/building-ui.html 注意到光标所在代码 ...
 - FZU 2214 Knapsack dp (转化背包)
			
就是一个背包裸题,由于物品的重量太大,开不了这么大的数组 所以转化一下,由于价值总和不大于5000,所以把价值看作重量,重量看作价值,那么就是同样的价值下,求一个最轻的重量 #include<c ...