android--Timer与TimerTask的工作原理及其相关函数的具体含义

原理:

     其基本处理模型是单线程调度的任务队列模型,Timer不停地接受调度任务,所有任务接受Timer调度后加入TaskQueue,TimerThread不停地去TaskQueue中取任务来执行.

 

 

     从图上不难看出,这就是生产者--消费者模型的一种特例:多生产者,单消费者模型。

     此种消息队列实现方式在浏览器中的编程模型中也有类似的实现,javascript中的定时执行函数setTimeout(expression,milliseconds)也是基于此种原理实现的。

     此种方式的不足之处为当某个任务执行时间较长,以致于超过了TaskQueue中下一个任务开始执行的时间,会影响整个任务执行的实时性。为了提高实时性,可以采用多个消费者一起消费来提高处理效率,避免此类问题的实现。

具体解释见http://www.cnblogs.com/jinspire/archive/2012/02/10/2345256.html

可见TimerTask可以看做只是一个事件,而Timer则是一个队列

1.Timer

    1. java.util.Timer timer = new java.util.Timer(true);   
    2. // true 说明这个timer以daemon方式运行(优先级低,   
    3. // 程序结束timer也自动结束),注意,javax.swing   
    4. // 包中也有一个Timer类,如果import中用到swing包,   
    5. // 要注意名字的冲突。   
    6.   
    7. TimerTask task = new TimerTask() {   
    8. public void run() {   
    9. ... //每次需要执行的代码放到这里面。   
    10. }   
    11. };   
    12.   
    13. //以下是几种调度task的方法:   
    14.   
    15. timer.schedule(task, time);   
    16. // time为Date类型:在指定时间执行一次。   
    17.   
    18. timer.schedule(task, firstTime, period);   
    19. // firstTime为Date类型,period为long   
    20. // 从firstTime时刻开始,每隔period毫秒执行一次。   
    21.   
    22. timer.schedule(task, delay)   
    23. // delay 为long类型:从现在起过delay毫秒执行一次   
    24.   
    25. timer.schedule(task, delay, period)   
    26. // delay为long,period为long:从现在起过delay毫秒以后,每隔period   
    27. // 毫秒执行一次。 
    28. timer.cancel()  //取消当前timer以及该队列中所有的Task(正在运行的任务不受影响),不再有任务添加到该队列,随后该计时器就什么也不做了
    29. timer.purge()  //从队列中移出已被取消的Task,使他们能被当做垃圾被回收掉

2.TimerTask一些常用函数的功能

timerTask.cancel()  //取消当前任务,并将其从队列中移出

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。