我有这样的视图模型
class StorageValidationViewModel: ViewModel(), CoroutineScope {
//Coroutines
private val _job = SupervisorJob()
override val coroutineContext: CoroutineContext
get() = Dispatchers.Main + _job
override fun onCleared() {
super.onCleared()
coroutineContext.cancel()
}
......
}
我有一些方法可以通过Retrofit
进行网络调用以启动协程
fun getStorageLocations(){
launch {
var locations:List<StorageLocationData>? = null
try {
locations = _storageLocationRepository.getAllStorageLocations()
}catch (e:IOException){
e.printStackTrace()
}
storageLocationsLiveData.postValue(locations)
}
}
一切正常,但是我感觉在清除ViewModel时我没有正确取消协程,因为我实际上没有在任何地方使用coroutineContext
从而造成内存泄漏
我应该做
launch(coroutineContext){
//API call?
}
或者我做的还好吗?我只想确保自己不会因执行的操作而造成内存泄漏