zoukankan      html  css  js  c++  java
  • android Timer与TimerTask的相关操作

     项目上面的部分操作需要使用到定时器进行周期性的控制。网络上面对于定时器的操作通常有三种实现方法。

    我是通过TimerTimerTask相结合实现的定时器功能。具体实现过程如下:

    第一步,得到Timer的实例化对象

      Timer timer= new Timer() ;

    第二步,实例化TimerTask对象

           TimerTask timerTask new TimerTask(){

              publicvoid run(){

                   //Doing something

               }

      }

      实例化TimerTask对象的时候,需要重写它的run()方法,然后在这个方法体内增加需要执行的具体操作。比如  输出一句话,发送一个消息之类的。

    第三步,启动定时器

           Timer.schedule(TimerTask, delay, period) ;

           这样创建并启动一个定时器的工作就完成,但是在实际使用的过程中,可能会需要一些其他方面的操作手段。

           因为在项目程序运行过程中,某个时刻定时器的参数被修改,比如delayperiod。为了及时的使用最新的正确的数据,就需要对已经存在的定时器进行关闭并且使用新的参数重新创建并启动。

           第一步,取消TimerTask,并在定时器Timer队列中将其删除。

           IftimerTask == null){

           timerTask .cancel() 

          

    第二步,重新启动定时器

           IftimerTasknull){

            timerTask new TimerTask

         public void run(){

         //do something

       ) 

          

           timer.scheduletimeTaskdelayperiod) 

           值得注意的地方是被执行了cancle()方法之后的TimerTask,在重新启动定时器的时候,必须重新实例化TimerTaskOK,不然会报“java.lang.IllegalStateException:TimerTask is scheduled already”的错误。每个定时器任务TimerTask只能被放置一次
  • 相关阅读:
    FZU 2112 并查集、欧拉通路
    HDU 5686 斐波那契数列、Java求大数
    Codeforces 675C Money Transfers 思维题
    HDU 5687 字典树插入查找删除
    HDU 1532 最大流模板题
    HDU 5384 字典树、AC自动机
    山科第三届校赛总结
    HDU 2222 AC自动机模板题
    HDU 3911 线段树区间合并、异或取反操作
    CodeForces 615B Longtail Hedgehog
  • 原文地址:https://www.cnblogs.com/LoongEmbedded/p/5298377.html
Copyright © 2011-2022 走看看