ITEEDU

android中定时器使用方法总结

采用Handler与timer及TimerTask结合的方法。

这种方法可以更新UI界面。

定义定时器、定时器任务及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);
  } 
};

初始化计时器任务。

task = new TimerTask() { 
	@Override 
	public void run() { 
		// TODO Auto-generated method stub 
		Message message = new Message(); 
		message.what = 1; 
		handler.sendMessage(message); 
	} 
};

启动定时器

timer.schedule(task, 2000, 2000);

简要说一下上面三步提到的一些内容。

定时器任务(TimerTask)顾名思义,就是说当定时器到达指定的时间时要做的工作,这里是想Handler发送一个消息,由Handler类进行处理。

Timer.schedule(TimerTask task, long delay):dalay/1000秒后执行task.只执行一次。

Timer.schedule(TimerTask task, long delay, long period):delay/1000秒后执行task,然后进过period/1000秒再次执行task,这个用于循环任务,执行无数次,当然,你可以用timer.cancel();取消计时器的执行。

采用Handler与线程的sleep(long )方法

这种方法可以更新UIl界面。

定义一个Handler类,用于处理接受到的Message.

Handler handler = new Handler() { 
	public void handleMessage(Message msg) { 
		//要做的事情
 		super.handleMessage(msg); 
 	}
};

新建一个实现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();
			}
		}
	}
}

在需要启动线程的地方加入下面语句:

new Thread(new MyThread()).start();

结束线程:

Thread.currentThread().interrupt();

Thread.currentThread()可以获得消息发送的线程,interrupt即是中断。

这种方法其实就是用线程代替了Timer。

采用Handler的postDelayed(Runnable, long) 方法

Handler handler=new Handler();
Runnable runnable=new Runnable(){ 
	@Override 
	public void run() { 
		// TODO Auto-generated method stub 
		//要做的事情 
		handler.postDelayed(this, 2000); 
	} 
};

启动计时器:

handler.postDelayed(runnable, 2000);//每两秒执行一次runnable.

停止计时器:

handler.removeCallbacks(runnable);