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)