AsyncTaskは、その名前が示すように、UIスレッドと非同期で実行されており、doInBackgroundが終了したときに、将来のある時点でonPostExecuteメソッドが呼び出されます。onPostExecuteメソッドがいつ呼び出されるかは関係ありません(実際には、プロジェクトのビルド時に通知する方法はありません)。onPostExecuteメソッドは、将来のある時点で基盤となるフレームワークによって適切に呼び出されることが保証されているだけです。したがって、onPostExecuteメソッドの目的は、ワーカースレッドから返された結果を処理することです。これが、onPostExecuteメソッドの唯一の引数がdoInBackgroundメソッドから返された結果である理由でもあります。
onPostExecuteメソッドから返される値を必要とする特定のアクティビティで何らかの操作を行う必要があります。どうすればこれを解決できますか?
当然のことながら、Activityクラスでいくつかのインスタンス変数を作成する(またはlisternerパターンを使用する)と、onPostExecuteメソッドで返され準備ができたときに結果が保存されます。問題は、この結果が実際にアプリの実行時に決定されるため、プロジェクトのビルド時にonPostExecuteメソッドの外部でいつ準備ができるかわからないことです。結果を継続的にポーリングする待機メカニズムを作成しない限り、結果としてAsyncTaskの利点が犠牲になります。たとえば、組み込みAPI AsyncTask.get()により、AsyncTaskがUIスレッドと同期して実行され、結果がActivityに返されます。
ベストプラクティスは、デザインを変更し、AsyncTaskから返される結果を必要とする操作コードをonPostExecuteメソッドに移動することです。お役に立てれば。