アクティビティで開始された AsyncTask を考えてみましょう。アクティビティが一時停止または破棄されるとどうなりますか? onPostExecute() は実行されますか? はいの場合、どの UI スレッドが使用されますか?
ただ疑問に思っています。
よろしくお願いします。
アクティビティで開始された AsyncTask を考えてみましょう。アクティビティが一時停止または破棄されるとどうなりますか? onPostExecute() は実行されますか? はいの場合、どの UI スレッドが使用されますか?
ただ疑問に思っています。
よろしくお願いします。
UIスレッドは、複数のアクティビティの組み合わせにまたがる可能性のある、アプリケーションの目に見える存続期間を通じて利用できます。
ビューで変更するものはすべてUIスレッドで実行する必要があり、AsyncTaskのonPostExecuteは、UIスレッド内の命令を実行することで同じロジックを反映します。
独自にrunOnUiThreadを使用しThread
て、ビューに変更を加えることができます。ただし、AsyncTaskにはonPostExecuteメソッド(UIスレッドでも実行される)があるため、論理的にrunOnUiThreadを使用する必要はありません。
アップデート
質問について:はい、アクティビティが破棄されてもonPostExecuteが呼び出されます(別のスレッドによって呼び出されるため)。メソッドがビューを操作する場合は、アクティビティへの参照が利用できないため、強制終了エラーが発生します。もう。
onPostExecute()
プロセス ダイアログのような UI スレッドが原因でクラッシュします。私の Asynctask が完了する前に、私のアクティビティが破棄されます。「ウィンドウが漏れました.....」と表示されるので、削除しonPostExecute()
ます。もうクラッシュしません..
onPause または onDestroyed で例外が発生しないように、キャンセル関数を呼び出すことを忘れないでください。