Сопрограммы Kotlin: почему я не вижу журналы до конца? - PullRequest
0 голосов
/ 19 июня 2019

Я новичок с соплинами 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
    }

1 Ответ

0 голосов
/ 19 июня 2019

Это потому, что ваш

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() вместе с включением / выключением индикатора выполнения.

...