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
- java.util.Timer timer = new java.util.Timer(true);
- // true 说明这个timer以daemon方式运行(优先级低,
- // 程序结束timer也自动结束),注意,javax.swing
- // 包中也有一个Timer类,如果import中用到swing包,
- // 要注意名字的冲突。
- TimerTask task = new TimerTask() {
- public void run() {
- ... //每次需要执行的代码放到这里面。
- }
- };
- //以下是几种调度task的方法:
- timer.schedule(task, time);
- // time为Date类型:在指定时间执行一次。
- timer.schedule(task, firstTime, period);
- // firstTime为Date类型,period为long
- // 从firstTime时刻开始,每隔period毫秒执行一次。
- timer.schedule(task, delay)
- // delay 为long类型:从现在起过delay毫秒执行一次
- timer.schedule(task, delay, period)
- // delay为long,period为long:从现在起过delay毫秒以后,每隔period
- // 毫秒执行一次。
- timer.cancel() //取消当前timer以及该队列中所有的Task(正在运行的任务不受影响),不再有任务添加到该队列,随后该计时器就什么也不做了
- timer.purge() //从队列中移出已被取消的Task,使他们能被当做垃圾被回收掉
2.TimerTask一些常用函数的功能
timerTask.cancel() //取消当前任务,并将其从队列中移出
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。