在try catch中开启新的线程,不能捕获线程里面的异常

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情

近期在review代码的时候发现,有些人为了图方便,直接在代码引用的最外层放上一个try catch,以为可以捕获一切异常,降低崩溃率。
事实上,如果try的是新开启的一个线程,那么这个线程里面出现的异常是catch不到。也就是说在A线程中new B线程,B线程中出现的crash跟A线程无关,A也catch不到。

public class TheadExceptionTest {

	public static void main(String[] args) {
		try {
			new Thread(new Runnable() {
				@Override
				public void run() {
					int i = 1 / 0;
				}
			}).start();
		} catch (Exception e) {
		}
	}

}

这样的try是不不到异常的。需要在Thread里面加上try catch。

public class TheadExceptionTest {

	public static void main(String[] args) {
		try {
			new Thread(new Runnable() {
				@Override
				public void run() {
					try {
						int i = 1 / 0;
					} catch (Exception e) {
						System.out.println("cannot / by zero!!!");
					}
				}
			}).start();
		} catch (Exception e) {
		}
	}

}

你可能感兴趣的:(#,Android--Bugs,Android)