android - Kotlin协程:为什么直到最后我才能看到日志?

标签 android kotlin kotlin-coroutines

我是Kotlin协程的新手,对此有些怀疑。因此,我尝试使用Kotlin协程下载字体列表,并添加了一些日志,以查看何时下载了字体或消息(当字体已经存在时)。我希望每次访问字体时都会看到一个日志,但是我只看到了progressBar,当它被隐藏时,我会立即看到所有日志。难道我做错了什么?

private fun init() {
    val job = Job()
    val bgScope = CoroutineScope(Dispatchers.IO + job)

    bgScope.launch {
        getStuff()
    }
}

fun getStuff() {
    val uiScope = CoroutineScope(Dispatchers.Main + Job())
    uiScope.launch {
        progressbar.visibility = View.VISIBLE
    }

    for (font in jsonObject.fontList) {
        if (!font.exists()) {
            downloadFile(font)
            Timber.d("file " + font.id + " downloaded: " + font.exists())
        } else {
            Timber.d("file " + font.id + " already exists ")
        }

    }

    uiScope.launch {
        progressbar.visibility = View.GONE
    }

最佳答案

那是因为你

for (font in jsonObject.fontList) {
        if (!font.exists()) {
            downloadFile(font)
            Timber.d("file " + font.id + " downloaded: " + font.exists())
        } else {
            Timber.d("file " + font.id + " already exists ")
        }

    }

在另一个线程中运行并延迟响应。因此,您应该在downloadFile完成后修改进度可见性。

您应该在downloadFileMethod()中启动协程,并打开/关闭进度条。

关于android - Kotlin协程:为什么直到最后我才能看到日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56668317/

相关文章:

java - 声明 Object 的新实例会导致 OutOfMemoryFailure。为什么?

android - 使用协程对任务进行排队

android - flowWithLifecycle(lifecycle, Lifecycle.State.STARTED) 在 App 在后台时不会停止流

android - 如何水平对齐菜单项

Java:如何具体 "forEach"操作类型

gradle - 如何使用Kotlin,Gradle和Web框架设置Spring Loaded?

kotlin - 在 Kotlin 中,如何绑定(bind)扩展方法以在接收者作用域函数中工作

spring - 如何在 Spring 响应式(Reactive) WebClient 中返回 Kotlin 协程流

android - 使用新数据调用invalidate()后,MP Android Chart消失

PHP fatal error : require_once(): Failed opening required