onPostExecute при отмененной AsyncTask - PullRequest
29 голосов
/ 26 июля 2010

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

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

Ответы [ 3 ]

67 голосов
/ 30 апреля 2013

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

Android 2.3.7 onPostExecute :

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

Android 4.0.1 onPostExecute :

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

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

7 голосов
/ 26 июля 2010

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

6 голосов
/ 06 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...