首先了解TimerTask的作用,参考:
Android中使用定时器TimerTask类介绍
http://www.android123.com.cn/androidkaifa/656.html
在Android平台中需要反复按周期执行方法可以使用Java上自带的TimerTask类,TimerTask相对于Thread来说对于资源消耗的更低,除了使用Android自带的AlarmManager使用Timer定时器是一种更好的解决方法。 我们需要引入import java.util.Timer; 和 import
java.util.TimerTask; private Timer mTimer = new Timer(true); private TimerTask mTimerTask; mTimerTask = new TimerTask() { public void run() { Log.v("android123","cwj"); } };
mTimer.schedule(mTimerTask, 5000,1000); //在1秒后每5秒执行一次定时器中的方法,比如本文为调用log.v打印输出。
如果想取消可以调用下面方法,取消定时器的执行
while(!mTimerTask.cancel());
mTimer.cancel();
最后Android123提示大家,如果处理的东西比较耗时还是开个线程比较好,Timer还是会阻塞主线程的执行,更像是一种消息的执行方式。当然比Handler的postDelay等方法更适合处理计划任务。
上文最后提到“如果处理的东西比较耗时还是开个线程比较好,Timer还是会阻塞主线程的执行,更像是一种消息的执行方式。当然比Handler的postDelay等方法更适合处理计划任务。”
也就是说TimerTask并没有开启新线程,还是在原来的线程中运行。虽然TimerTask有run方法,但这只是一个普通方法。而创建新线程是通过Thread类的start()方法来启动新线程的。
通过api中对TimerTask的描述也可以看出来。
<!-- end header -->java.lang.Object | |
↳ | java.util.TimerTask |
Class Overview
The TimerTask
class represents a task to run at a specified time. The task may be run once or repeatedly.
参考:http://www.ideasandroid.com/android/sdk/docs/reference/java/util/TimerTask.html
TimerTask虽然实现了Runnable接口,但没有start()方法,并不能构成一个新的线程。
再看Timer的API定义:
<!-- end header -->java.lang.Object | |
↳ | java.util.Timer |