用J2SE和Android,都运行相同的TimerTask,表现
1. Java代码
import java.util.Timer;
import java.util.TimerTask;
public class ddd {
public static void main(String[] args) throws Exception {
Timer timer = new Timer();
timer.schedule(new Task(), 10, 1000);
}
static class Task extends TimerTask {
public void run() {
System.out.println("**");
int i = 5 / 0;
System.out.println(i);
}
}
}
2. Andrdoi代码
import android.app.Activity;
import android.os.Bundle;
import java.util.Timer;
import java.util.TimerTask;
public class ddd extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Timer timer = new Timer();
timer.schedule(new Task(), 10, 1000);
}
static class Task extends TimerTask {
public void run() {
System.out.println("**");
int i = 5 / 0;
System.out.println(i);
}
}
}
表现为,J2SE程序会因java.lang.ArithmeticException: / by zero挂掉。Android程序会每隔一秒打印一行“**”,就是说错误代码没有抛出异常,而是被简单的忽略掉。
所以,开发TimerTask时要小心的处理异常,把可能抛出的异常都catch住处理掉。
分享到:
相关推荐
需要注意的是,`Timer`和`TimerTask`在多线程环境中运行,因此必须确保任务代码的线程安全,尤其是在操作共享数据时。 `TimerTask`和`Timer`虽然简单易用,但它们并不是Java中唯一实现定时任务的方法。在更复杂的...
此外,`Timer`的调度线程会在所有`TimerTask`执行完毕后才结束,因此如果有一个`TimerTask`因为某种原因(比如抛出未捕获异常)而无法完成,那么整个`Timer`对象可能会一直存在,造成资源泄漏。在Java 5及以上版本中...
- 考虑到`Timer`和`TimerTask`可能存在的内存泄漏问题,特别是在Activity中使用时,记得在不再需要定时任务时取消它们。 - 使用`Handler`时,确保在不需要处理消息时调用`removeCallbacksAndMessages(null)`,防止...
3. **异常处理**:`TimerTask`的`run()`方法没有直接抛出异常的机制,如果`run()`方法内部抛出未捕获的异常,会导致`TimerTask`被标记为故障,并不再执行后续调度。因此,需要在`run()`方法中进行适当的异常处理。 ...
### Timer和TimerTask的使用详解 #### 一、引言 `Timer` 和 `TimerTask` 是Java中用于实现定时任务的重要工具。它们提供了一种简单有效的方式来安排任务的执行,既可以一次性执行也可以周期性地执行。这对于实现...
在Java编程语言中,`TimerTask`和`Timer`是两个关键类,它们用于实现定时任务和调度。这两个类在处理需要定期执行的任务时非常有用,例如数据刷新、任务调度或者周期性的系统检查等。本篇文章将深入探讨`TimerTask`...
这是因为`TimerTask`运行在后台线程,不能直接修改UI,必须通过主线程来处理。 然后,我们可以创建一个`Timer`实例,并使用`schedule()`方法来安排`TimerTask`的执行: ```java Timer timer = new Timer(); ...
Handler更适合用于处理与UI相关的定时任务,因为它始终在主线程中运行,不会阻塞UI。而TimerTask则更适用于后台任务,它的执行线程与创建它的线程无关,但不保证精确的定时执行,可能受到系统调度的影响。在实际开发...
Android中使用定时器TimerTask类介绍.txt Android中使用定时器TimerTask类介绍.txt
同时,如果TimerTask抛出未检查的异常会终止timer线程。 Timer的使用可以分为两种情况,一种是使用Timer来执行延时任务,另一种是使用Timer来执行周期性任务。在使用Timer来执行延时任务时,需要在TimerTask中实现...
- `Timer`调度的任务在执行时,如果抛出未捕获的异常,会终止`Timer`线程,并可能导致整个应用程序退出。因此,建议在`TimerTask`的`run()`方法中捕获异常。 - 虽然`Timer`可以调度多个任务,但这些任务是按照FIFO...
Spring框架提供了一套强大的定时任务解决方案,而JDK自带的`TimerTask`类则是实现定时任务的基础工具。本文将深入探讨如何在Spring框架中结合JDK的`TimerTask`来创建和管理定时任务。 ### Spring定时任务简介 ...
在Java Web开发中,`ServletContextListener`、`Timer`和`TimerTask`是三个非常重要的概念,它们分别涉及Web应用程序的生命周期管理、定时任务的执行和控制。下面将详细讲解这三个概念及其应用。 首先,`...
默认构造函数创建非守护线程,而带参数的构造函数可以指定线程是否作为守护线程运行,或者设置线程的名称。 `TimerTask`是一个抽象类,它实现了`Runnable`接口,因此可以被线程执行。你需要通过继承`TimerTask`并...
3. `TimerTask`的`run()`方法抛出的异常会被吞掉,建议在`run()`中处理可能出现的异常,避免隐藏错误。 这个"TimerTask_Demo.zip"提供的例子应该包含了上述的代码框架,你可以下载后进行查看和学习,以便更好地理解...
### Timer与TimerTask详解 在Java编程语言中,`Timer`和`TimerTask`是用于执行定时任务的重要类。这两个类通常被用来处理那些需要在指定时间或周期性执行的任务,比如定时清理缓存、定时更新数据库等场景。 #### ...
这里,我们在`@PostConstruct`回调方法中初始化`TimerTask`,并在`@PreDestroy`回调方法中取消定时器,以确保应用关闭时定时器能被正确清理。 4. **其他定时策略** `@Scheduled`注解支持多种定时策略,例如: - ...
因此,编写`TimerTask`时应处理好可能出现的异常情况。 - 如果需要更复杂的定时任务调度,比如多线程并发执行、精确的时间控制等,可以考虑使用Java 5及更高版本引入的`java.util.concurrent`包中的`...
下面是一个在Android中使用定时器Timer和TimerTask的启动,停止,暂停,继续等操作的demo。 需要注意的问题主要有两点: 1、Timer和TimerTask在调用cancel()取消后不能再执行 schedule语句 2、只能在UI主线程中更新...
- 如果任务执行过程中抛出了异常,定时器会忽略该异常继续执行后续任务。 - **cancel**:`bool cancel(const TimerTaskPtr& task);` 用于取消已调度的任务。该方法返回 `true` 表示成功取消,`false` 则表示未...