Thread.sleep
java的方式,不推薦
sleep使線程暫停,如果需要循環,需要手動設置while之類。
實現方式:
- 定義Handler類:接收消息並處理
Handler handler = new Handler() {
public void handleMessage(Message msg) {
// 要做的事情
super.handleMessage(msg);
}
};
- 定義一個實現Runnable接口的線程類:該線程循環發送消息,並用sleep設置時間間隔。
public class MyThread implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
Thread.sleep(5000);// 線程暫停5秒,單位毫秒
Message message = new Message();
message.what = 1;
handler.sendMessage(message);// 發送消息
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
- 啓動線程:
new Thread(new MyThread()).start();
postDelayed(Runnable, long)
最簡單的android實現
該方法在一定時間後啓動Runnable對象
- 設置一個Handler
Handler handler = new Handler();
- 設置runnable,在其中用handler再次調用runnable以實現循環,間隔即爲循環時間間隔
Runnable runnable=new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
//要做的事情,這裏再次調用此Runnable對象,以實現每兩秒實現一次的定時器操作
handler.postDelayed(this, 2000);
}
};
- 啓動線程時,如果不需要延時,可以直接
runnable.run();
,如果需要延時開始,則調用handler.postDelayed(runnable, 1000);
- 停止計時器
handler.removeCallbacks(runnable);
Timer&TimerTask
比較多的任務時建議使用
TimerTask task = new TimerTask(){
public void run(){
//execute the task
}
};
Timer timer = new Timer();
timer.schedule(task, 250);
此處是僅延時執行,schedule方法還可以加上一個參數作爲定時執行的間隔時間,即schedule(TimerTask task, long delay, long period)