0

公式ドキュメントによると、スレッド化された Task で例外が発生した場合、 AsyncTask#get()は ExecutionException をスローします。AsyncTask#doInBackground(Params...)メソッドで例外がスローされたことを現在の AsyncTask に通知するにはどうすればよいですか?

4

2 に答える 2

0

できません。

ExecutionException は、 によってFuture#get()内部的に呼び出されるメソッドによってスローされAsyncTask#get()ます。

Futureでは、実行された非同期ブロック内で例外をスローできます。への呼び出しFuture#get()は、ExecutionException にカプセル化されたそのような例外をスローします。

ただし、AsyncTasks では、メソッド内で例外をスローすることはできませんAsyncTask#doInBackground()。したがって、このメカニズムを例外処理に使用することはできません。これは、アーキテクチャ設計上の決定のようです。

免責事項:

おそらく、関連するonAsyncTask#doInBackground()につながるRuntimeExceptions を にスローすることができますが、そうすべきではありません ;)ExecutionExceptionAsyncTask#get()

ノート:

呼び出しスレッドを呼び出しAsyncTask#get()てブロックしてもよろしいですか? メイン/UI スレッドから呼び出すと、タスクが完了するまでユーザー インターフェイスの更新が停止します。

于 2012-11-04T18:45:00.543 に答える
0

同期なので何も得られないのでAsyncTask.get()、まったく使用しないのが最善ですget()

于 2012-11-04T17:43:20.490 に答える