为什么执行AsyncTask时不需要捕获TimeoutException?

Why TimeoutException does not need to be caught when executing AsyncTask?

我对 Java 和 Android 开发还很陌生。我查看了 AsyncTask 的代码,看到 class 抛出了 3 个异常:

当我 运行 在 AsyncTask 对象上执行方法时,如果我没有捕获 InterruptedExceptionExecutionException,为什么编译器会报错,但是不抱怨TimeoutException ?

更一般地说,我们如何知道需要捕获哪些异常? (当然我查看了编译器错误并编写了缺少的catch块,但我想了解其背后的原理)。

非常感谢!

Example code:
public void test() {
    AsyncTask at = new AsyncTask() {
        @Override
        protected Object doInBackground(Object[] params) {
            return null;
        }
    };

    Object o;
    try {
        o = at.execute().get();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }

}

编辑:我检查过 TimeoutException 是一个已检查的异常(应该被捕获)。但是@NicolasFilotto 已经回答了我的问题。谢谢大家

get() method only throws InterruptedException, ExecutionException and CancellationException that is why you don't need to catch TimeoutException in your case, only the method get(long timeout, java.util.concurrent.TimeUnit unit) 抛出上面列出的 3 个异常,CancellationExceptionget() 对应,但有超时。

注意: CancellationException是一个未经检查的异常,所以不需要捕获。