32

がキャンセルされたonPostExecute場合は実行されますか?AsyncTask

実行された場合、他のことをする前に、タスクがisCancelled開始時にキャンセルされたかどうか()を常に確認する必要があると言っても差し支えありonPostExecuteませんか?

4

3 に答える 3

68

文書化されたcancel()でのonPostExecuteの動作は、Android2とAndroid4の間で変更されました。

Android 2.3.7 onPostExecute

doInBackgroundの後にUIスレッドで実行されます。指定された結果は、doInBackgroundによって返される値であり、タスクがキャンセルされた場合、または例外が発生した場合はnullです。

Android 4.0.1 onPostExecute

doInBackgroundの後にUIスレッドで実行されます。指定された結果は、doInBackgroundによって返される値です。タスクがキャンセルされた場合、このメソッドは呼び出されません。

したがって、Android 2デバイスを引き続きターゲットにしている場合は、onPostExecuteが呼び出され、onPostExecuteでnullの結果がないかどうかを確認する必要があります。

于 2013-04-30T14:05:00.587 に答える
8

私の経験では、タスクがキャンセルされたときにonPostExecute()は実際には呼び出されません。ただし、タスクのdoInBackground()が終了した後、onPostExecute()が呼び出される前に、タスクをキャンセルできる場合があります。この場合、onPostExecute()が実際に呼び出されます。したがって、確かに、onPostExecute()でisCancelled()メソッドを呼び出し、タスクがキャンセルされた場合は単に「return」します。わたしにはできる。

于 2010-07-26T14:54:30.047 に答える
7

AsyncTaskのソースコードを確認したところ、タスクがキャンセルされてもonPostExecuteが呼び出されたようです。ただし、onPostExecuteを呼び出す前に、タスクがキャンセルされた場合、結果はnull(?)に設定されます。

編集:@bainは更新された回答を提供します。

于 2010-08-06T15:06:51.220 に答える