我对协程还很陌生,所以我决定该是时候开始更多地了解它们了。
想法:我从应用程序的相机供稿中提取了一个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) {
...
}
}
}
然后一切都很好。这是为什么?我是否以错误的方式解决了这个问题?