Проблема с ClosedReceiveChannelException и привязкой данных - PullRequest
0 голосов
/ 09 июня 2019

Я пишу фрагмент кода, в котором используются сопрограммы Kotlin Pipilens и привязка данных Android.

Во время работы я обнаружил, что при сбое моей процедуры из-за 'ClosedReceiveChannelException' связывается модель представления (черезПривязка данных) не обновляет «Связанные компоненты».

fun onProcessStart(cachedImageId: String) = viewModelScope.launch {
    text = "Started for image: $cachedImageId"

    try {
        val extractedTextPipe = extractText(cachedImageId)
        val processedTextPipe = processText(extractedTextPipe)
        val processedText = processedTextPipe.receive()
        text = "Finished for image: $cachedImageId"
    } catch (t: Throwable) {
        Log.d("TEST", t.message+ " "+t)
        text = "Failed for image: $cachedImageId with code: ${t.message}"
    }
}

Несмотря на то, что улов срабатывает и Log.d присутствует в журналах, text с новым сообщением никогда не обновляется.

Это не будет сюрпризом, еслиследующее также не сработало:

 fun onProcessStart(cachedImageId: String) = viewModelScope.launch {
        text = "Started for image: $cachedImageId"

        try {
            throw IllegalStateException()
            text = "Finished for image: $cachedImageId"
        } catch (t: Throwable) {
            Log.d("TEST", t.message+ " "+t)
            text = "Failed for image: $cachedImageId with code: ${t.message}"
        }
    }

Вышеприведенный код работает - текст с catch обновлен.

Мой вопрос - почему один раз выдается val processedText = processedTextPipe.receive()ClosedReceiveChannelException значение text перестает обновляться.

- edit. Эту проблему также можно наблюдать со следующими параметрами:

  text = "Started for image: $cachedImageId"

    try {
        delay(10000)
        throw IllegalStateException()
    } catch (t: Throwable) {
        Log.d("TEST", t.message + " " + t + " " + Thread.currentThread().id)
        text = "Failed for image: $cachedImageId with code: ${t.message}"
    }

1 Ответ

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

Хорошо - после хорошего ночного сна я понял, что забыл использовать LiveData в поле text.

...