12

アクティビティで開始された AsyncTask を考えてみましょう。アクティビティが一時停止または破棄されるとどうなりますか? onPostExecute() は実行されますか? はいの場合、どの UI スレッドが使用されますか?

ただ疑問に思っています。

よろしくお願いします。

4

3 に答える 3

12

UIスレッドは、複数のアクティビティの組み合わせにまたがる可能性のある、アプリケーションの目に見える存続期間を通じて利用できます。

ビューで変更するものはすべてUIスレッドで実行する必要があり、AsyncTaskonPostExecuteは、UIスレッド内の命令を実行することで同じロジックを反映します。

独自にrunOnUiThreadを使用しThreadて、ビューに変更を加えることができます。ただし、AsyncTaskにはonPostExecuteメソッド(UIスレッドでも実行される)があるため、論理的にrunOnUiThreadを使用する必要はありません。


アップデート

質問について:はい、アクティビティが破棄されてもonPostExecuteが呼び出されます(別のスレッドによって呼び出されるため)。メソッドがビューを操作する場合は、アクティビティへの参照が利用できないため、強制終了エラーが発生します。もう。

于 2012-05-21T13:30:11.250 に答える
1

onPostExecute()プロセス ダイアログのような UI スレッドが原因でクラッシュします。私の Asynctask が完了する前に、私のアクティビティが破棄されます。「ウィンドウが漏れました.....」と表示されるので、削除しonPostExecute()ます。もうクラッシュしません..

于 2012-05-21T14:38:47.203 に答える
0

onPause または onDestroyed で例外が発生しないように、キャンセル関数を呼び出すことを忘れないでください。

于 2012-05-21T14:07:02.040 に答える