公式ドキュメントによると、スレッド化された Task で例外が発生した場合、 AsyncTask#get()は ExecutionException をスローします。AsyncTask#doInBackground(Params...)メソッドで例外がスローされたことを現在の AsyncTask に通知するにはどうすればよいですか?
2 に答える
できません。
ExecutionException は、 によってFuture#get()
内部的に呼び出されるメソッドによってスローされAsyncTask#get()
ます。
Futureでは、実行された非同期ブロック内で例外をスローできます。への呼び出しFuture#get()
は、ExecutionException にカプセル化されたそのような例外をスローします。
ただし、AsyncTasks では、メソッド内で例外をスローすることはできませんAsyncTask#doInBackground()
。したがって、このメカニズムを例外処理に使用することはできません。これは、アーキテクチャ設計上の決定のようです。
免責事項:
おそらく、関連するonAsyncTask#doInBackground()
につながるRuntimeExceptions を にスローすることができますが、そうすべきではありません ;)ExecutionException
AsyncTask#get()
ノート:
呼び出しスレッドを呼び出しAsyncTask#get()
てブロックしてもよろしいですか? メイン/UI スレッドから呼び出すと、タスクが完了するまでユーザー インターフェイスの更新が停止します。
同期なので何も得られないのでAsyncTask.get()
、まったく使用しないのが最善ですget()