【发布时间】:2019-09-02 09:02:48
【问题描述】:
如果处理时间超过 250 毫秒,我想显示进度对话框。
我正在尝试使用协程来做到这一点。我的问题是我是否删除“延迟(250)”行,它总是先运行dismissProgressDialog()然后运行showProgressDialog()。我认为这是关于 GlobalScope.launch(Dispatchers.Main) 因为当我删除它时,它会按预期首先运行 showProgressDialog()。
fun showProgressDialog() =
GlobalScope.launch(Dispatchers.Main) {
if (!customDialog.isShowing) {
forceCloseLoading = false
LogUtils.e("progress show before delay")
delay(250)
LogUtils.e("progress show after delay")
if (!forceCloseLoading) {
customDialog.show()
}
}
}
fun dismissProgressDialog() {
forceCloseLoading = true
LogUtils.e("progress dismiss")
try {
if (customDialog.isShowing) {
customDialog.dismiss()
}
} catch (e: Exception) {
e.printStackTrace()
}
}
这是我的 logcat 输出:
progress dismiss
progress show before delay
progress show after delay
如果处理时间超过 250 毫秒,我如何才能显示进度对话框?
【问题讨论】:
-
能否也分享一下调用
showProgressDialog和dismissProgressDialog的代码,好吗?看起来有些东西阻塞了您的主线程并阻止showProgressDialog被安排运行。您可以使用launch(Dispatchers.Main, start=CoroutineState.UNDISPATCHED)强制它立即运行直到在delay()暂停。
标签: android kotlin coroutine kotlin-coroutines