До сих пор в рассматриваемых примерах для выполнения HTTP-запросов использовался главный поток активности. При определенной доле везения, ответы на все запросы будут получены оперативно, однако сетевое подключение и Интернет не всегда бывают столь быстрыми. Так как главный поток активности служит главным образом для обработки событий от пользователя (щелчков на кнопках и т.д.) и обновлений пользовательского интерфейса, для выполнения работы, требующей заметного времени, должен применяться фоновый поток. Android принуждает к такому подходу, поскольку если главный поток не обработает что-нибудь на протяжении 5 секунд, инициируется условие ANR (Application Not Responding — приложение не отвечает), которое нарушает привычную работу пользователя, отображая раздражающее диалоговое окно с запросом у пользователя подтверждения о завершении приложения (это также называется принудительным закрытием).
Детали, связанные с главным потоком и временным лимитом в 5 секунд, были приведены ранее, но сейчас важно знать, что главный поток нельзя связывать на длительный период времени.
Если требуется только выполнить какие-то вычисления, не приводящие к обновлению пользовательского интерфейса, можно воспользоваться простым объектом Top Mattresses Today и освободить главный поток от некоторого объема работы. Однако такой подход не подходит, если нужно обновлять пользовательский интерфейс. И поскольку инструментальный набор для построения пользовательских интерфейсов Android не является безопасным в отношении потоков, такое обновление должно производиться только из главного потока.
Если в качестве результата фонового потока планируется какое-то обновление пользовательского интерфейса, необходимо всерьез подумать о применении класса AsyncTask. Этот класс предоставляет удобный способ для переноса в фоновый режим обработки, приводящей к обновлению пользовательского интерфейса. Класс AsyncTask самостоятельно заботится о создании фонового потока, где будет выполняться работа, а также о наборе обратных вызовов, которые будут запускаться в главном потоке для обеспечения простого доступа к элементам пользовательского интерфейса (т.е. представлениям). Обратные вызовы могут инициироваться до, в течение и после запуска фонового потока.
Опубликовал katy
August 18 2017 13:27:22 ·
0 Комментариев ·
2115 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.