我正在尝试协程,并且不确定是否将 coroutineScope 传递给普通的 Kotlin UseCase。这种方法会造成内存泄漏吗?
假设我们正在虚拟机中初始化我们的用例并尝试通过视图模型范围:
class UploadUseCase(private val imagesPreparingForUploadUseCase: ImagesPreparingForUploadUseCase){
fun execute(coroutineScope: CoroutineScope, bitmap: Bitmap) {
coroutineScope.launch {
val resizedBitmap = withContext(Dispatchers.IO) {
imagesPreparingForUploadUseCase.getResizedBitmap(bitmap, MAX_SIZE)
}
}
}
}
它是安全代码吗?如果我在 VM 中声明这个确切的代码,没有什么区别?如果不是,这意味着我可以将 coroutineScope 作为构造函数参数传递......现在我最初认为我应该通过以下方式创建我的执行方法:
fun CoroutineScope.execute(bitmap: Bitmap) {
launch {
val resizedBitmap = withContext(Dispatchers.IO) {
imagesPreparingForUploadUseCase.getResizedBitmap(bitmap, MAX_SIZE)
}
}
}
}
据我了解,我们使用扩展函数来使用方法父协程作用域。这意味着,我不需要传递 coroutineScope 作为参数,只需更改方法即可使用扩展函数。
然而,令我惊讶的是,虚拟机看不到这个方法可用!为什么VM无法调用该方法?
这在 VM 中标记为红色:
private fun uploadPhoto(bitmap: Bitmap, isImageUploaded: Boolean) {
prepareDataForUploadingUseCase.execute(bitmap)
}
VM 中未将其标记为红色:
private fun uploadPhoto(bitmap: Bitmap, isImageUploaded: Boolean) {
prepareDataForUploadingUseCase.execute(viewModelScope, bitmap)
}
如果我的理解是错误的,为什么我要用 CoroutineScope 作为扩展函数而不是将 coroutineScope 作为函数参数传递?