Timer简单学习

一、简单使用
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值