定时器----Timer

来源:互联网 发布:土巴兔云设计软件下载 编辑:程序博客网 时间:2024/06/06 08:47
1.Timer介绍
来自jdk:
一种工具,线程用其安排以后在后台线程中执行的任务。可安排执行一次,或者定期重复执行。
与每个Timer对象对应的是单个后台线程,用于顺序地执行所有计时器任务。

2.TimerTask介绍
由Timer安排为一次执行或重复执行的任务。TimerTask实现了Runnable接口,待执行的任务置于run()中。
Timer是一个安排TimerTask的类,两者一般一起工作。
使用时首先应创建一个TimerTask的对象,然后用一个Timer的类对象安排执行它。

3.使用步骤
(1)实现TimerTask的子类或是写成匿名内部类,run方法中写要执行的代码。
(2)实例化Timer类,创建计时器后台线程。
(3)实例化TimerTask子类。
(4)使用Timer类的schedule方法开始执行。schedule的第一个参数是TimerTask对象,第二个参数表示延迟执行的时间。若是有第三个参数,则代表重复执行的时间间隔。若是没有,则代表不重复。

4.使用实例

protected Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {handler.sendEmptyMessage(10086);}}, 1000, 1000);

把TimerTask定义成匿名内部类。

5.结束Timer
使用Timer中的cancel方法。
sleeptimer.cancel();
还有一些其他的方法:在TimerTask内的任务执行完后,将timer对象的引用置空(timer = null;)这样timer线程会终止。或是使用System.exit方法,让整个程序终止。

6.注意:
一个Timer仅对应一个线程;
Timer的构造方法启动计时器线程;
在Android中使用的时候,由于Timer对应一个线程,故不能在其中更新UI组件。可以在run方法中使用Handler发消息,然后在Handler中更新UI。
Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {// TODO Auto-generated method stubLog.d("zhangmq", "schedule schedule");if (stop) {int tmp = (int) (Math.random() * 100) + 1;Message msg = Message.obtain();msg.what = 100;msg.arg1 = tmp;myHandler.sendMessage(msg);} else {cancel();}}}, 0, 50);Handler myHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);switch (msg.what) {case 100:show.setText(msg.arg1 + "");break;}}};

7.与Handler的区别
Timer是在线程中执行run方法,对应一个线程。
Handler是将执行的动作加到Android系统的消队列中,默认情况还是在主线程中执行。




0 0
原创粉丝点击