Задать вопрос
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
    }
}
  • Вопрос задан
  • 88 просмотров
Подписаться 2 Средний Комментировать
Решения вопроса 1
402d
@402d
начинал с бейсика на УКНЦ в 1988
сахар/синтаксис языка прячет от вас внутреннюю кухню.

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

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

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

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

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

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