Что означает "работает в потоке пользовательского интерфейса" для onPostExecute()?

Рассмотрим AsyncTask, запущенную в Activity. Что произойдет, если действие приостановлено или уничтожено? Будет ли выполняться onPostExecute()? Если да, то какой поток пользовательского интерфейса будет использоваться?

Просто интересно.

Большое спасибо заранее.

Ответ 1

Пользовательский интерфейс доступен во время видимой жизни вашего приложения, которое может охватывать комбинацию нескольких действий.

Все, что вы меняете в представлениях, должно выполняться в потоке пользовательского интерфейса, а onPostExecute AsyncTask отражает ту же логику, выполняя инструкции внутри потока пользовательского интерфейса.

Вы можете использовать runOnUiThread в своем собственном Thread, чтобы внести изменения в представления. Но поскольку AsyncTask имеет метод onPostExecute (который также работает в потоке пользовательского интерфейса), поэтому вам не требуется использовать runOnUiThread.


Обновление

Относительно вашего вопроса: Да, onPostExecute все равно будет вызван (потому что он вызван отдельным потоком), даже если ваша активность уничтожена и если метод будет манипулировать Views, вы просто получите Force Close, потому что ссылка на вашу активность больше не доступна.

Ответ 2

Он сработает в onPostExecute() из-за потока пользовательского интерфейса, как диалоговое окно процесса. Это случается со мной, моя активность уничтожается до завершения моей Asynctask. В нем говорится, что "окно просочилось....." Итак, я удаляю onPostExecute(). Больше нет сбоев..

Ответ 3

Не забудьте вызвать функцию отмены, которая будет лишена исключения в вас наПап или onDestroyed.