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只能被放置一次
  • 相关阅读:
    51NOD 1773:A国的贸易——题解
    BZOJ4553:[HEOI2016/TJOI2016]序列——题解
    BZOJ4597:[SHOI2016]随机序列——题解
    BZOJ1858:[SCOI2010]序列操作——题解
    BZOJ5157 & 洛谷3970:[TJOI2014]上升子序列——题解
    BZOJ3173:[TJOI2013]最长上升子序列 & HDU3564:Another LIS——题解
    BZOJ4755: [JSOI2016]扭动的回文串——题解
    洛谷2000:拯救世界——题解
    PPP中的PAP和CHAP的区别
    Linux C 实现一个简单的线程池
  • 原文地址:https://www.cnblogs.com/LoongEmbedded/p/5298377.html
Copyright © 2011-2022 走看看