如果处理时间超过250毫秒,我希望显示进度对话框。
我正在尝试使用协程来完成这个任务。我的问题是,无论我是否删除“delay(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
如果处理时间大于250ms,我该如何仅显示进度对话框?
showProgressDialog
和dismissProgressDialog
的代码?看起来有些东西正在阻塞您的主线程,从而防止showProgressDialog
被安排运行。您可以使用launch(Dispatchers.Main, start=CoroutineState.UNDISPATCHED)
强制它运行直到在delay()
处暂停。 - Roman Elizarov