【问题标题】:Coroutines : Runblocking freeze Android UI协程:运行阻塞冻结 Android UI
【发布时间】:2020-11-04 01:57:56
【问题描述】:

我正在用 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 个作业完成而不冻结 UI(或至少是动画)。

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

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

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

提前致谢, 对不起我的英语不好, 托马斯

【问题讨论】:

    标签: android kotlin asynchronous freeze coroutine


    【解决方案1】:

    您可以尝试使用Main CorotineContext 启动另一个协程并在那里等待工作:

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

    【讨论】:

    • 工作正常!非常感谢:)
    • 工作顺利,非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多