协程:Runblocking冻结Android UI

时间:2020-07-14 16:53:01

标签: android kotlin asynchronous freeze coroutine

我正在Kotlin中开发一个Android应用程序。 验证报名表后,我启动了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个工作完成而不会冻结UI(或动画)。

我尝试使用runBlocking,但是它冻结了UI ...

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

如何在不冻结UI的情况下等待我的3个工作?

预先感谢, 对不起我的英语不好, 托马斯

1 个答案:

答案 0 :(得分:1)

您可以尝试使用Main CorotineContext启动另一个协程,然后在那里等待作业:

CoroutineScope(Main).launch {
    jobA!!.join()
    jobB!!.join()
    jobC!!.join()
}
相关问题