【原】android 中定時器的幾種用法總結 2010-11-08 18:08

在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即是中斷。

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. android上一些方法的区别和用法的注意事项
  5. android实现字体闪烁动画的方法
  6. Android中dispatchDraw分析
  7. 浅析Android中的消息机制-解决:Only the original thread that cr
  8. Android四大基本组件介绍与生命周期
  9. Android(安卓)MediaPlayer 常用方法介绍

随机推荐

  1. Android(安卓)关闭后台音频播放
  2. Android(安卓)Market 多APK 包支持
  3. 【Android(安卓)Studio】Migrating From
  4. Android(安卓)仿微信TabHost使用方法详解
  5. android中颜色对应的值
  6. Android保存文件到手机
  7. Android通知权限相关工具类
  8. android全局Toast
  9. Android(安卓)Banner 广告条
  10. Android库. 1 WIFI相关