协同程序:运行阻塞冻结 Android UI
Coroutines : Runblocking freeze Android UI
我正在使用 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()
}
如何在不冻结的情况下等待我的 3 个工作 UI?
提前致谢,
对不起我的英语不好,
托马斯
您可以尝试使用 Main
CorotineContext
启动另一个协程并在那里等待作业:
CoroutineScope(Main).launch {
jobA!!.join()
jobB!!.join()
jobC!!.join()
}
我正在使用 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()
}
如何在不冻结的情况下等待我的 3 个工作 UI?
提前致谢, 对不起我的英语不好, 托马斯
您可以尝试使用 Main
CorotineContext
启动另一个协程并在那里等待作业:
CoroutineScope(Main).launch {
jobA!!.join()
jobB!!.join()
jobC!!.join()
}