Timer简单学习

来源:互联网 发布:yii2打印sql语句 编辑:程序博客网 时间:2024/06/06 08:46

一、简单使用

new Timer().schedule(new TimerTask() {    @Override    public void run() {        //执行异步任务    }},5000);

以上即一个5s后执行的任务;
更多类似的方法如下:

timer.schedule(new TimerTask(){}, 1000, 3000);// 1秒后启动任务,以后每隔3秒执行一次线程Date date = new Date();timer.schedule(new TimerTask(){},new Date(date.getTime()+1000));//以date为参数,指定某个时间点执行线程

如要和主线程互动操作,则如下:

timer.schedule(new TimerTask() {    @Override   public void run() {   //任务代码......     mHandler.post(new Runnable() {       //必须用handler来跟主线程进行通信 然后再处理相关事宜,如要涉及到ui操作,一定要回到主线程来,不然会报错。      @Override      public void run() {      }     });    }   }  }, 0, 3000);

二、取消

timer.cancel()

三、相关知识解释

Timer是计时器,可以设定成特定时间或特定的时间周期产生信号,不过这里只有Timer是没有用的,必须配合TimerTask才有作用。Timer一旦与某个TimerTask产生关联,就会在产生信号的同时,连带一起执行TimerTask所定义的工作。

所以Timer用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。

TimerTask的实现只需要继承TimerTask类就并实现其run()方法就可以了。run()方法是由我们自己来编写的,把你想做的工作放在里面,一旦Timer在特定时间内或周期产生信号,run()方法就会执行,我们通会Timer的schdeule()方法来设定特定时间或特定的周期。

schdeule()有两种形式:

一个是两个参数的:第一个参数是TimerTask的对象,第二个是时间也可是以Date对象。
一个是三个参数的:具有三个参数的schedule方法可以使一个task在某一个时间后,根据一定的间隔时间运行多次,具有周期性。

最后,可以使用Timer的cancel()方法来停止Timer,调用cancel()之后,两者就会脱离关系。TimerTask本身也有cancel()方法。

注意
Timer启动的TimerTask是非主线程的,如果在任务完成后要对UI进行操作,那一定要使用

handler.post(new Runnable(){})

来和主线程进行通信。任何有关UI的操作都必须在主线程中执行,如更新数值,弹窗等等。

0 0
原创粉丝点击