根據官方文檔,當線程任務中發生異常時,AsyncTask#get()將引發ExecutionException。我如何通知當前的AsyncTask在AsyncTask#doInBackground(Params...)方法中拋出異常?如何設置由AsyncTask的get方法拋出的ExecutionException?
回答
最好是不要用AsyncTask.get()
,因爲在所有get()
是同步的,所以你將一無所獲
你不能。
ExecutionException由Future#get()
方法拋出,該方法由AsyncTask#get()
內部調用。
Futures確實允許在他們執行的異步塊中拋出異常。對Future#get()
的調用將拋出一個封裝在ExecutionException中的異常。
但是,AsyncTasks不允許在AsyncTask#doInBackground()
方法中拋出異常。因此,您不能將此機制用於異常處理。這似乎是一個建築設計決策。
免責聲明:
你或許可以仍然拋出RuntimeExceptions在AsyncTask#doInBackground()
,導致對AsyncTask#get()
相關ExecutionException
...但你不應該;)
注:
確定你想撥打AsyncTask#get()
並阻止你的調用線程?從主/ UI線程調用它將導致用戶界面停止刷新,直到任務完成。
我目前正在使用此解決方案來管理AsyncTasks: http://www.codeproject.com/Articles/162201/Painless-AsyncTask-and-ProgressDialog-Usage 此解決方案通過使用AsyncTask#get()方法。我正在做一個解決方法,但我可以模擬行爲。 – Gonzalo
- 1. Memcache get方法拋出IOException
- 2. 如何使asynctask拋出WriterException?
- 3. ExecutionException當通過HQL拋出查詢
- 4. 的AsyncTask機器人 - 爲ExecutionException錯誤
- 5. ManagementObjectSearcher get()方法拋出一個異常
- 6. 沒有get()方法的AsyncTask返回值
- 7. 嘗試設置Asynctask中的水平進度條拋出NullPointerException
- 8. Weakreference get()方法有多安全? (Android,asynctask)
- 9. Apache Thrift:拋出由方法中執行的代碼拋出的異常
- 10. 如何從asyncTask設置GridViewCustomAdapter?
- 11. JavaAssist ClassPool類'get方法拋出java.lang.String的NotFoundException
- 12. Mockito無法在方法中拋出異常時設置
- 13. 列出可能由方法拋出的所有異常
- 14. 如何設置AsyncTask的計數器?
- 15. 如何處理由java.net.URL.openConnection()拋出的IOException?
- 16. 的Android 2.3.3的AsyncTask調用拋出NoSuchFieldError
- 17. HTTPBuilder在GET方法上設置requestBody
- 18. 拋出父方法的方法
- 19. 重構方法拋出最多一個檢查的異常,而不是爲ExecutionException和InterruptedException的
- 20. 如何爲get方法配置Angular $ resourceProvider
- 21. 由.get()方法形成的url模式
- 22. 的Symfony路由AJAX get方法
- 23. Python - 如何訪問由方法設置的可變數據
- 24. 的JavaScript array.prototype如何設置「這個」,由一個方法
- 25. 覆蓋rails輔助路由方法來設置GET參數的佈局
- 26. Android如何設置超時延遲響應異步get方法
- 27. 何時拋出「java.io.IOException:由對等方重置連接」?
- 28. 在AsyncTask中的GridView中爲ArrayList <object>設置值的方法/方法
- 29. 如何插入方法拋出異常?
- 30. Silex:Spika服務器拋出NotFoundHttpException:找不到「GET/api」的路由
事情是我有一個AsyncTaskManager對象,只要AsyncTask完成,它就會接受AsyncTasks並管理它們以通知調用者Activity。它還提供了我需要的一些其他功能。鑑於此,當AsyncTask完成時,我需要能夠調用get()方法。 現在,我會做一個解決方法,但我認爲API的一部分並沒有很好地實現(除非有人真的知道如何使它正常工作)。 – Gonzalo
也許你可以使用Executor將Runnables/Callables提交給它,而不是AsyncTask。 –