3

UI スレッド (アクティビティの onCreate() ハンドラー) から AsyncTask をインスタンス化して実行しています。構成の変更が原因でアクティビティが再起動しないことを保証します (たとえば、向きの変更は無視されます)。

私の Activity.onCreate(): asynctask.execute() を使用すると、UI スレッドが何らかのジョブを実行し、Activity.onCreate() が終了する前に同期するために asynctask.get(...) が呼び出されます。

ログによると、私の asynctask.onPostExecute() は、 asynctask.get() が戻っ てから数年後に呼び出されます。より正確には、Activity.onResume (!) が戻った後に onPostExecute が呼び出されます。(つまり、呼び出されます。私のメソッド定義は問題ありません。@Override も使用します。)

onPostExecute() が UI スレッドのハンドラーにポストされるため、UI スレッドはその準備ができている必要があるとどこかで読みましたが、この場合、なぜ準備ができていないのでしょうか? 私のアプリケーションは向きの変更から始まりますが、マニフェストの設定により、構成が変更されることはありません。

onPostExecute() が asynctask.get()に対していつ呼び出されるかという保証はありますか?

4

1 に答える 1

3

ログによると、私の asynctask.onPostExecute() は、 asynctask.get() が戻ってから数年後に呼び出されます。より正確には、Activity.onResume (!) が戻った後に onPostExecute が呼び出されます。

get()doInBackground()ソースコードの読み取りに基づいて、完了するのを待つだけです。

onPostExecute() が asynctask.get() に対していつ呼び出されるかという保証はありますか?

onPostExecute()get()私のソースコードの読みに基づいて、リターン後に呼び出されます。ただし、この動作が文書化されておらず、変更される可能性がある限り、これは「保証」ではありません。

于 2012-05-05T12:01:27.603 に答える