Обработка растровых операций с использованием сопрограмм - PullRequest
0 голосов
/ 02 июля 2019

Я довольно новичок в сопрограммах, поэтому я решил, что пришло время больше узнать о них.

Идея: я беру один Image из камеры моего приложения, а затем хочу обработать это Image до Bitmap.Дело в том, что для вычисления toBitmap() требуется некоторое время, поэтому я решил выполнить его в фоновом потоке следующим образом:

private fun processImage() {
    viewModelScope.launch {
        withContext(dispatcherProvider.background) {
            val bitmap = ImageUtils.toBitmap(imageBeingProcessed)
            ...
        }
    }
}

Это привело к ошибке: "java.lang.IllegalStateException: изображение ужезакрыто".Я предполагаю, что GC очистил экземпляр объекта Image, и именно поэтому я получил эту проблему.Но .. В то же время, если я выполню такую ​​же функцию, как это:

private fun processImage() {
    val bitmap = ImageUtils.toBitmap(imageBeingProcessed)

    viewModelScope.launch {
        withContext(dispatcherProvider.background) {

            ...
        }
    }
}

Тогда все в порядке.Это почему?Я неправильно решаю эту проблему?

...