我对 Java 和 Android 开发还很陌生。我查看了 AsyncTask
的代码,看到该类抛出 3 个异常:
中断异常
执行异常
TimeoutException
当我在 AsyncTask
对象上运行 execute 方法时,如果我没有捕获 InterruptedException
和 ExecutionException
,为什么编译器会报错>,但不提示 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()
方法只抛出 InterruptedException
、ExecutionException
和 CancellationException
这就是为什么你不需要在你的情况下捕获 TimeoutException
, 只有方法 get(long timeout, java.util.concurrent.TimeUnit unit)
抛出上面列出的 3 个异常和 CancellationException
,它与 get()
对应,但有超时。
注意: CancellationException
是未经检查的异常,因此不需要捕获。
关于java - 为什么执行AsyncTask时不需要捕获TimeoutException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41577187/