Способы выполнения кода в UI потоке. Можно ли обновлять View не из UI потока?

Обращаться к каким-нибудь элементам View не из UI потока нельзя, поэтому UI поток так и назван, что только он может обновлять вьюхи. Если попытаться обновить вьюхи не из UI потока, то вылетит CalledFromWrongThreadException.

Есть несколько способов исполнить кусок кода в UI потоке.

  1. Использовать метод activity.runOnUiThread(Runnable). Этот метод выполняет кусок кода, который записан в метод run() объекта Runnable. Если этот метод был вызван из UI потока, то UI поток просто сразу исполнит данный код, если же из какого-либо другого потока, то данный кусок кода будет добавлен в очередь.
  2. Использовать метод view.post(Runnable), view.postDelayed(Runnable, Long). View.post(Runnable) работает точно так же как и runOnUiThread(Runnable), а вот view.postDelayed(Runnable, Long) позволяет отложить исполнение кода на заданное количество миллисекунд
  3. Использовать handler. У класса Handler есть несколько методов, которые добавлять сообщения в очередь сообщений потока. Так что если создать handler для UI потока, используя либо context.getMainLooper() или Looper.getMainLooper() и затем добавлять сообщения в очередь, можно будет запускать код на главном потоке. У класса Handler для этого есть следующие методы:
  • handler.post()
  • handler.postDelayed()
  • handler.postAtTime()
  • handler.postAtFrontOfQueue() – но этот метод может привести к неожиданным последствиям, так что использовать его необходимо только в особенных случаях на свой страх и риск.

Проверьте себя после изучения темы

Бесплатный бот с тестами и практическими заданиями по Kotlin.

  • 22 бесплатных урока
  • Тесты к каждому уроку (всего 220 вопросов)
  • Задачи в рамках практики KotlinSprint (120 задач) и курсовой проект «Телеграм бот для изучения иностранных слов»
Начать обучение

Вам также может быть интересно

Узнать подробнее
Курс AndroidSprint

Глубокое обучение Android разработке с 0 до получения оффера. Только персональная практика с гарантией получения продуктового опыта.

Узнать подробнее
Узнать подробнее
Практикум по Kotlin

Изучение Котлин с 0 для профессиональной разработки. Личный ментор и разбор кода задач через git-flow.

Узнать подробнее
Узнать подробнее
Бесплатные уроки по Kotlin разработке

Самостоятельное освоение базы по языку для дальнейшего развития в Android/back-end разработке или в автотестах.

Узнать подробнее
Узнать подробнее
Onboarding в разработку

Полное обучение Android разработке с нуля до получения оффера. Делаем упор на практику и обратную связь

Узнать подробнее
Узнать подробнее
Обучающий Kotlin телеграм бот (с тестами)

Ваш основной инструмент для изучения основ языка. Бесплатные тесты и практика внутри.

Узнать подробнее
Узнать подробнее
Бесплатные уроки по Android разработке

Самостоятельное обучение разработке Андроид приложений. Понятные видеоуроки с разжеванными примерами.

Узнать подробнее
Узнать подробнее
Курс по UI/Unit тестированию

Для ручных тестировщиков, которые готовы осваивать автотесты с использованием актуального стека технологий. [в разработке]

Узнать подробнее
Узнать подробнее
Обучающий Android телеграм бот (с тестами)

Бесплатные теоретические тесты для самопроверки. А также информер на практических спринтах по Android.

Узнать подробнее