android 中定時器的幾種用法總結

转载 2012年03月27日 16:23:32

转自: http://hi.baidu.com/ljlkings/blog/item/fa2a598092666180f603a6dc.html


在android中,經常用到的定時器主要有以下幾種實現:
一、採用Handler與線程的sleep(long )方法
二、採用Handler的postDelayed(Runnable, long) 方法
三、採用Handler與timer及TimerTask結合的方法。
下面逐一介紹:
一、採用Handle與線程的sleep(long )方法
Handler主要用來處理接受到的消息。這只是最主要的方法,當然Handler裡還有其他的方法供實現,有興趣的可以去查API,這裡不過多解釋。
1.定義一個Handler類,用於處理接受到的Message.
Handler handler = new Handler() {
   public void handleMessage(Message msg) {
    //要做的事情
    super.handleMessage(msg);
   }
};
2.新建一個實現Runnable接口的線程類。如下:
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.在需要啟動線程的地方加入下面語句:
new Thread(new MyThread()).start();
4.啟動線程後,線程每10s發送一次消息。
二、採用Handler的postDelayed(Runnable, long) 方法
這個實現比較簡單一些:
1. Handler handler=new Handler();
Runnable runnable=new Runnable(){
   @Override
   public void run() {
    // TODO Auto-generated method stub
    //要做的事情
    handler.postDelayed(this, 2000);
   } 
};
2.啟動計時器:
handler.postDelayed(runnable, 2000);//每兩秒執行一次runnable.
3.停止計時器:
handler.removeCallbacks(runnable);
三、採用Handler與timer及TimerTask結合的方法。
1.定義定時器、定時器任務及Handler句柄
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.初始化計時器任務。
task = new TimerTask() {
    @Override
    public void run() {
     // TODO Auto-generated method stub
     Message message = new Message();
     message.what = 1;
     handler.sendMessage(message);
    }
   };
3.啟動定時器
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();取消計時器的執行。

 

-------------------------------------------------------------2011/3/23------------------------------------------------------------------

如果我們採用第一種方法,如何結束掉線程呢?當然如果你的程序在run方法裡有做控制,線程就不用結束,當run方法運行完畢,線程也就隨之結束。那今天就說一下在Handler裡面對線程的控制,如果想要在Handler裡面結束線程,可用:

Thread.currentThread().interrupt();

Thread.currentThread()可以獲得消息發送的線程,interrupt即是中斷。


2017.11.2 測試總結并今日總結

2017.11.2 – Day 25T1:安排活动….一道加强了一点数据范围的题,代码还是不变…排序貪心即可。T2:這是一道纯暴力的題(表示自己打的是O(N^3),膜拜大佬)…附图如下↓(暴力の代码@...
  • tfg19szm
  • tfg19szm
  • 2017年11月02日 20:18
  • 36

總結幾種常見的 Word 轉換 PDF 方法

关于 PDF 制作软件,善用佳软已有详细的介绍及评测,我就针对已安装 Microsoft Office 环境的情况,介绍一些相对简便的 Word2PDF 思路,当然正在使用 Adobe Acrob...
  • Benjayming
  • Benjayming
  • 2013年10月17日 11:48
  • 733

2017.10.30 測試總結并今日總結

(27號是真的就不想寫了….)2017.10.30 – Day 22考前小總結:不吃飯真的不行啊…(餓)…做到T1胃虚了…(餓)…测试总结:T1:成功的被坑杀…前: inline void Chec...
  • tfg19szm
  • tfg19szm
  • 2017年10月30日 19:03
  • 57

Struts個人總結

1,Struts2访问ServletAPI有哪些方式?在Action中如何获取session,request,response。 答:ActionContext对象以解藕的方式访问ServletAP...
  • u010730171
  • u010730171
  • 2014年03月23日 20:39
  • 107

LabVIEW按钮延时自动弹起

同事在现场碰到的问题: 要求按钮被按下后,一定时间后自动弹起。 问题分析: 1、采用事件结构,记录按钮按下的时间; 2、只有当按钮按下时,才开始计时; 3、计时结束后,弹起按钮,并初始化计时器; ...
  • ap0108220
  • ap0108220
  • 2013年11月19日 15:38
  • 2205

android 上傳圖片的幾種方法

最近项目中要用优化文件上传操作,因此对Android端文件上传做下总结。测试服务器端就用PHP写了,比较简单,代码如下: 查看文本打印? $base_path = "....
  • jodan179
  • jodan179
  • 2014年08月14日 20:05
  • 3225

quartz定时任务时间设置

链接地址:http://www.cnblogs.com/skyblue/p/3296350.html 这些星号由左到右按顺序代表 :     *    *     *     *    *     ...
  • lms1256012967
  • lms1256012967
  • 2016年09月05日 16:57
  • 2160

Libev源码分析03:Libev使用堆管理定时器

Libev中在管理定时器时,使用了堆这种结构,而且除了常见的最小2叉堆之外,它还实现了更高效的4叉堆。          之所以要实现4叉堆,是因为普通2叉堆的缓存效率较低,所谓缓存效率低,也就是...
  • gqtcgq
  • gqtcgq
  • 2015年10月17日 13:15
  • 1108

機器人學總結(1) —— 機器人的描述

0 前言         接觸機器人已經有一定的時間了(其實也不是很長),一直想把這方面的知識和經驗總結一下。主要是想為自己做個整理,如果那裡有錯誤或者有問題的地方,還請大家指正、’指點和交流。  ...
  • mobius_strip
  • mobius_strip
  • 2016年12月02日 22:57
  • 647

Java实现定时任务的3种方式

三种方式:普通的Thread、Timer、ScheduledExecutorService
  • u011983531
  • u011983531
  • 2015年10月25日 23:25
  • 599
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 中定時器的幾種用法總結
举报原因:
原因补充:

(最多只允许输入30个字)