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

标签 java android android-asynctask exception-handling timeoutexception

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

  • 中断异常
  • 执行异常
  • TimeoutException

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

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

非常感谢!

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()方法只抛出 InterruptedExceptionExecutionExceptionCancellationException 这就是为什么你不需要在你的情况下捕获 TimeoutException , 只有方法 get(long timeout, java.util.concurrent.TimeUnit unit)抛出上面列出的 3 个异常和 CancellationException,它与 get() 对应,但有超时。

注意: CancellationException 是未经检查的异常,因此不需要捕获。

关于java - 为什么执行AsyncTask时不需要捕获TimeoutException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41577187/

相关文章:

java - 寻找 java.net.SocketException : No buffer space available

android - RSolr::Error::Http - 400 错误请求 - 路径中缺少 solr 核心名称

android - xliff :g stand for中的字母g是什么意思

java - 接受一系列数字? for循环

java - 将一系列值分配给单个变量

android - gridview 中的 OnItemLongClickListener 不工作

java - 在 android 中从 doInBackground() 获取响应之前调用 AsyncTask onPostExecute() 吗?

在 targetSdkVersion 8 上运行 AsyncTask 时 Android 崩溃

Java : a WebService asking embeded in a AsyncTask

java - 重绘()不起作用