根据官方文档,AsyncTask#get()在线程任务中发生异常时会抛出 ExecutionException。如何通知当前 AsyncTask 在AsyncTask#doInBackground(Params...)方法中引发了异常?
问问题
811 次
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()
,导致相关ExecutionException
的AsyncTask#get()
... 但您不应该;)
笔记:
您确定要调用AsyncTask#get()
并阻止调用线程吗?从你的 main/ui 线程调用它会导致你的用户界面停止刷新,直到你的任务完成。
于 2012-11-04T18:45:00.543 回答