Как проверить состояние AsyncTask?
Во время выполнения этого примера приложения после нажатия кнопки сообщение о ходе работ обновляется и затем выводится изображение. Перед тем, как сообщение о ходе работ начинает обновляться, состояние кнопки возвращается от нажатого к нормальному. Это важное наблюдение, т.к. оно означает, что главный поток вернулся к управлению пользовательским интерфейсом, в то время как загрузка пока еще выполняется.
Просто ради интереса измените строку URL обращения к службе диаграмм Google, чтобы в конечном итоге возникла ошибка. Теперь запустите приложение еще раз. Вы должны получить результат, показанный на рис. 15.2.
Существует еще ряд моментов, которые необходимо знать о классе AsyncTask. После создания экземпляра расширения AsyncTask и запуска его метода execute() главный поток возвращается к своему выполнению. Но мы по-прежнему имеем ссылку на задачу и можем оперировать ею из главного потока. Например, можно вызвать метод cancel (), чтобы уничтожить задачу. Или же можно вызвать isCancelled() и проверить, прервана ли задача. Для обработки таких прерываний задачи понадобится модифицировать логику в методе onPostExecute(). В AsyncTask есть две формы get(), где можно получить результат из doInBackground() вместо того, чтобы позволять делать необходимую работу onPostExecute(). Одна из форм get() блокирует, а другая использует значение тайм-аута, что предотвращает слишком долгое ожидание со стороны вызывающего потока.
AsyncTask может быть запущен только один раз. По этой причине, если вы сохранили ссылку на AsyncTask, не вызывайте метод execute() более одного раза на ней. В противном случае возникнет исключение. Вполне можно создавать новые экземпляры AsyncTask, но каждый из них может быть запущен только один раз. Именно поэтому мы создаем новый экземпляр DownloadImageTask каждый раз, когда в нем возникает необходимость. Дополнительные сведения о классе AsyncTask приводятся в главе 18, где рассматриваются более сложные концепции. А теперь мы хотим продемонстрировать специальный случай встраивания AsyncTask для загрузки файлов в фоновом режиме.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.