2012-11-04 56 views

回答

0

最好是不要用AsyncTask.get(),因爲在所有get()是同步的,所以你將一無所獲

+0

事情是我有一個AsyncTaskManager對象,只要AsyncTask完成,它就會接受AsyncTasks並管理它們以通知調用者Activity。它還提供了我需要的一些其他功能。鑑於此,當AsyncTask完成時,我需要能夠調用get()方法。 現在,我會做一個解決方法,但我認爲API的一部分並沒有很好地實現(除非有人真的知道如何使它正常工作)。 – Gonzalo

+0

也許你可以使用Executor將Runnables/Callables提交給它,而不是AsyncTask。 –

0

你不能。

ExecutionException由Future#get()方法拋出,該方法由AsyncTask#get()內部調用。

Futures確實允許在他們執行的異步塊中拋出異常。對Future#get()的調用將拋出一個封裝在ExecutionException中的異常。

但是,AsyncTasks不允許在AsyncTask#doInBackground()方法中拋出異常。因此,您不能將此機制用於異常處理。這似乎是一個建築設計決策。

免責聲明:

你或許可以仍然拋出RuntimeExceptions在AsyncTask#doInBackground(),導致對AsyncTask#get()相關ExecutionException ...但你不應該;)

注:

確定你想撥打AsyncTask#get()並阻止你的調用線程?從主/ UI線程調用它將導致用戶界面停止刷新,直到任務完成。

+0

我目前正在使用此解決方案來管理AsyncTasks: http://www.codeproject.com/Articles/162201/Painless-AsyncTask-and-ProgressDialog-Usage 此解決方案通過使用AsyncTask#get()方法。我正在做一個解決方法,但我可以模擬行爲。 – Gonzalo

相關問題