0

根据官方文档,AsyncTask#get()在线程任务中发生异常时会抛出 ExecutionException。如何通知当前 AsyncTask 在AsyncTask#doInBackground(Params...)方法中引发了异常?

4

2 回答 2

0

最好不要使用AsyncTask.get(),因为get()是同步的,所以你什么也得不到

于 2012-11-04T17:43:20.490 回答
0

你不能。

Future#get()ExecutionException 由内部调用的方法引发AsyncTask#get()

期货确实允许在其执行的异步块中抛出异常。调用Future#get()将抛出封装在 ExecutionException 中的此类异常。

然而,AsyncTasks 不允许在AsyncTask#doInBackground()方法中抛出异常。因此,您不能将此机制用于异常处理。这似乎是一个架构设计决策。

免责声明:

您可能仍然可以在您的 中抛出 RuntimeExceptions AsyncTask#doInBackground(),导致相关ExecutionExceptionAsyncTask#get()... 但您不应该;)

笔记:

您确定要调用AsyncTask#get()并阻止调用线程吗?从你的 main/ui 线程调用它会导致你的用户界面停止刷新,直到你的任务完成。

于 2012-11-04T18:45:00.543 回答