Подтвердить что ты не робот

OnPostExecute при отмене AsyncTask

Выполняется ли onPostExecute, если AsyncTask был отменен?

Если это выполняется, можно ли сказать, что я всегда должен спрашивать, была ли задача отменена (isCancelled) в начале onPostExecute, прежде чем делать что-либо еще?

4b9b3361

Ответ 1

Зарегистрированное поведение onPostExecute on cancel() было изменено между Android 2 и Android 4.

Android 2.3.7 onPostExecute:

Работает в потоке пользовательского интерфейса после doInBackground. Указанный результат значение, возвращаемое doInBackground или null, если задача была отменена или произошло исключение.

Android 4.0.1 onPostExecute:

Работает в потоке пользовательского интерфейса после doInBackground. Указанный результат значение, возвращаемое doInBackground. Этот метод не будет вызываться, если задача была отменена.

Итак, если вы все еще нацелены на устройства Android 2, вы должны предположить, что onPostExecute будет вызван и в onPostExecute проверит нулевой результат.

Ответ 2

По моему опыту onPostExecute() фактически не вызывается, когда задача отменяется. Однако может быть возможно отменить задачу после завершения задачи doInBackground(), но до вызова onPostExecute() - в этом случае onPostExecute() фактически вызывается. Поэтому, конечно, я вызываю метод isCancelled() в onPostExecute() и просто "возвращаю", если задача была отменена. Это работает для меня.

Ответ 3

После проверки исходного кода AsyncTask кажется, что onPostExecute вызывается, даже если задача отменена. Однако перед вызовом onPostExecute результат устанавливается равным null (?), Если задача отменена.

Изменить: @bain предоставляет обновленный ответ .