Start аndroid: Урок 80. Handler. Немного теории. Наглядный пример использования

Автор Alla Bessonova
Start аndroid: Урок 80. Handler. Немного теории. Наглядный пример использования

Всем привет.

Это урок 80 в этом уроке мы разбираемся. Что такое хендлер и. Зачем он нужен до полного понимания урока желательно иметь представление о потоках Java просто ведь и не объяснишь, что такое хендлер можете попробовать посчитать официальное описание, но там достаточно нетривиальное мало написано.

Я попробую здесь в двух словах рассказать в Android потоку может быть на очередь сообщений мы можем помещать туда сообщение о система будет за очередь уследить и отправлять сообщения на обработку при этом мы можем указать чтобы сообщение ушло на обработку не сразу, а спустя количество времени Finder — это механизм который позволяет работать с очереди сообщений он привязан к конкретному работает всего очереди хэндлер умеет помещать сообщение в очередь при этом он ставит самого себя в качестве получателя этого сообщения и когда приходит время система достаёт сообщение из очереди адресату Toyota Highlander на обработку даёт нам интересные и полезные возможности 1 или сдавать отложенное по времени выполнения кода второе выполнение кода не в своем потоке подозреваю, что стало не сильно понятнее.

А главное зачем вообще нужен этот. Эндер ближайшие несколько уроков будем с этим разбираться и все станет понятно в этом уроки сделаем небольшое приложение она будет курировать какой-либо долго действия например закачку файлов и в textview выводить количества закачиваемой файлов с помощью этого примером увидим. Зачем может быть нужен хендлер и так создадим проект файл settings.xml File Activity Main xml прогресс-бар у нас будет крутиться позже станет. Понятно зачем textview для вывода информации закачки файлов кнопка. Старт будет стартовать закачку кнопка тест. Будет просто выводить в лог слово тест кот онлайн Activity обработчики кнопки. Старт мы организуем цикл для закачки файлов каждой итерации цикла выполняем Method download File который эмулирует закачку обновляем textview и пишем блог информацию о том, что количество затраченных файлов изменилась этого у нас должны заключаться 10 файлов и после закачки каждого из них. Лог и экран показывает сколько файлов уже закончены по нажатию кнопки тест просто выводим звук сообщения download File эмулирует закачку файлов — это просто пауза в одну секунду всё сохранились приложение мы видим. Что прогресс-бар крутится по нажимаем на кнопку тест 2 как появился тест порядки приложение. Называется наши действия теперь. Расположите и видео на экране монитора так чтобы он не перекрывал вкладку. Лога в Eclipse нам надо будет видеть их одновременно если жмем кнопку. Старт потом мы должны наблюдать. Как обновляется textview и пишется лук после закачки очередного файла, но на деле будет немного не так наши приложение просто зависит. И перестанет реагировать остановится прогресс-бар не будет обновляться textview и не будет нажиматься кнопка тест то есть экран для нас станет недоступным и только пологом будет понятно, что на самом деле работает и файла заканчиваются так только все 10 файлов будут закачай приложение оживает и снова начинает реагировать на нашей нажатии. А всё. Почему Потому, что работа обеспечивается основным потоком приложение, а мы заняли весь этот основной поток под свои нужды в нашем случае как будто ты как только. Мы закончили закачивать файлы по только освободился экран стал снова обновляться реагировать на нажатие для тех кто имеет опыт коды на Java. Я ничего нового не открыл достойных же надеюсь у меня получилось доступно объяснить тут надо понять одну вещь основной поток приложение отвечает за экран этот поток ни в коем случае нельзя грузить чем-то тяжелым экран просто перестает обновляться реагирует на нажатие. Если у вас есть долгоиграющие задачи их надо вынести в отдельный поток попробуем — это сделать перепишем onclick то есть мы просто помещаем весь цикл в новый поток и запускаем его теперь закачка файлов пойдёт в этом новом потоке, а основной поток будет не заняты сможешь проблем прорисовывать экран не реагирует на нажатие. А значит мы будем видеть изменения текстур после каждого закончена учащиеся прогресс-бар. И вообще сможем полноценно взаимодействует в приложениях. Казалось бы вот оно счастье — это всё сохраним и запустим приложение жмем. Старт приложение вылетело с ошибкой смотрим. Лог ошибок смотрим. Что — это за код у нас mainactivity Java 37 строки при попытке выполнить этот код не в основном потоке мы получили ошибку если по-русски звучит так только оригинальный поток создавший её компоненты может взаимодействовать с ними то есть работа с компонентами доступно только — это основного потока, а новая потоки которые мы создаем не имеют доступа к элементам экрана то есть с одной стороны нельзя загружать основной поток тяжёлыми задачами чтобы экран другой стороны новая потоки созданные для выполнения тяжелых задач не имеет доступа к экрану и мы не можем из пользователю, что наша тяжелая задача как-то движется тут нам поможет хендлер план такой мы создаем в основном потоке. КНДР потоки закачки файлов. Обращаемся КНДР и с помощью помещаем в очередь сообщение для него же самого система берёт — это сообщение видит, что адрес отеля и отправляет сообщения на обработку Fender Fender получив сообщение. Обновите чем-то отличается от нашей предыдущей попытки обновить тексту из другого потока отличается тем, что он был создан в основном потоке и обрабатывать поступающему сообщение в основном потоке. А значит будете иметь доступ к экранным компонентом из. Может поменять текст в textview получить доступ к Hyundai из какого-либо другого потока мы сможем без проблем так как поток монополизирует только доступ к экрану, а элементы класса в нашем случае — это термин Activity Java.

0 комментариев
0

Читайте также