使用协程处理位图操作

时间:2019-07-02 11:27:18

标签: android kotlin coroutine

我对协程还很陌生,所以我决定该是时候开始更多地了解它们了。

想法:我从应用程序的相机供稿中提取了一个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) {

            ...
        }
    }
}

然后一切都很好。这是为什么?我是否以错误的方式解决了这个问题?

0 个答案:

没有答案