Сопрограммы: блокировка запуска Android UI - PullRequest
1 голос
/ 14 июля 2020

Я разрабатываю приложение android в Kotlin. После проверки формы ввода я запускаю 3 задания для одновременного выполнения 3 HTTP-вызовов:

val jobA = CoroutineScope(IO).launch {
   // saves some data in my database
}
val jobB = CoroutineScope(IO).launch {
   // saves an image in my aws bucket
} 
val jobC = CoroutineScope(IO).launch {
   // if exists, deletes the old image in my aws bucket
} 

Перед запуском этих 3 заданий я запускаю анимацию загрузчика (я использую эту библиотеку: https://github.com/81813780/AVLoadingIndicatorView)

Мне нужно дождаться завершения моих 3 заданий, не замораживая пользовательский интерфейс (или, по крайней мере, анимацию).

Я пробовал использовать runBlocking, но он зависает в пользовательском интерфейсе ...

runBlocking() {
   jobA!!.join()
   jobB!!.join()
   jobC!!.join()
}

Как я могу дождаться трех моих заданий, не замораживая пользовательский интерфейс?

Заранее спасибо, извините за мой английский sh, Thomas

1 Ответ

1 голос
/ 14 июля 2020

Вы можете попробовать запустить другую сопрограмму, используя Main CorotineContext, и ждать там заданий:

CoroutineScope(Main).launch {
    jobA!!.join()
    jobB!!.join()
    jobC!!.join()
}
...