У меня есть модель моего вида как таковая
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?
}
или у меня все хорошо? Я просто хочу убедиться, что я не создаю утечки памяти с тем, что я делаю