Задать вопрос
denis-hrebeniuk
@denis-hrebeniuk
Мобайл/бэкенд разработчик

Каким образом у меня получается работать с UI элементами используя Dispatchers.IO?

Здравствуйте! С недавних пор интересуюсь корутинами и столкнулся с интересным вопросом. Каким образом создавая корутину используя Dispatchers.IO (код прикрепил), я способен изменять данные UI?

private lateinit var progressBarDownload: ProgressBar

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_loading)

    progressBarDownload = findViewById(R.id.progressBarDownload)

    lifecycleScope.launch(Dispatchers.IO) {
		// какая-то загрузка файла
		var downloadProgress = 50 // прогресс загрузки файла
		progressBarDownload.progress = downloadProgress
    }
}
  • Вопрос задан
  • 98 просмотров
Подписаться 2 Средний Комментировать
Помогут разобраться в теме Все курсы
  • AndroidSprint
    Android + Аутстаффинг: опыт работы в IT-команде
    8 месяцев
    Далее
  • Нетология
    Android-разработчик
    14 месяцев
    Далее
  • Академия Эдюсон
    Android-разработчик: тариф Базовый
    6 месяцев
    Далее
Решения вопроса 1
402d
@402d
начинал с бейсика на УКНЦ в 1988
сахар/синтаксис языка прячет от вас внутреннюю кухню.

Произвольный поток в андроиде напрямую не может менять ui на активити. Используют обмен из сообщениями через хелдлер или явно объявляют что из него потребуется взамодействие. Так же Dispatchers взял на себя роль экзекутора (причем очень крутого, где задачи выполнябтся в несколько потоков)

lifecycleScope.launch(Dispatchers.IO) {
вот эту часть можно считать объявлением анонимной функции
}

progressBarDownload.progress - а здесь у нас замыкание

в общем от Вас язык спрятал кучу рутины
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы