Timer和TimerTask并没有开启新线程

首先了解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的描述也可以看出来。

public abstract class

TimerTask

extends Object
implements Runnable
<!-- 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定义:

public class

Timer

extends Object
<!-- end header -->
java.lang.Object
java.util.Timer
由此可见Timer只是一个普通的类,不是Thread的子类,并不能创建一个新的线程。
所以说,Timer和TimerTask并没有创建新线程,还是在主线程中运行,如果是执行耗时操作,还是会阻塞主线程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值