Stack Overflow на русском Asked on December 16, 2021
Пытаюсь выполнить загрузку модели в корутине и нарисовать результат в ImageView
. Выполнить рисование в корутине невозможно, так как создается другой поток, если попытаться рисовать после выполнения корутины, то нет ожидания выполнения корутины и рисуется белый ImageView
. Как дождаться выполнения корутины, получить результат и продолжить выполнение кода в главном потоке?
fun someFun() {
GlobalScope.launch {
val downloadModel: MDownloadingFragment
val fragmentManager = supportFragmentManager
downloadModel = MDownloadingFragment()
downloadModel.show(fragmentManager, "DOWNLFRAGMENT")
val inputStream = contentResolver.openInputStream(documentUri)!!
val model = getModel(inputStream)
stlModel = model.await()
downloadModel.dismiss()
}
setImage(graph(stlModel))
}
fun getModel(inputStream: InputStream) =
GlobalScope.async(Dispatchers.IO) { parseModel(inputStream) }// suspend fun parseModel
}
Вы можете переключаться внутри корутины на разные Dispatcher. Вот вам небольшой пример:
private var viewModelJob = Job()
private val uiScope = CoroutineScope(Dispatchers.Main + viewModelJob)
uiScope.launch {
withContext(Dispatchers.IO) {
//Do background tasks...
withContext(Dispatchers.Main){
//Update UI
}
}
}
Так же неплохо описана работа с корутинами в документации.
А вот здесь вы можете найти очень хорошие уроки по корутинам.
Answered by Sergei Buvaka on December 16, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP