TimerTask抛不出运行时异常
用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住处理掉。