Я правильно отменяю сопрограммы - PullRequest
0 голосов
/ 03 мая 2019

У меня есть модель моего вида как таковая

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?
}

или у меня все хорошо? Я просто хочу убедиться, что я не создаю утечки памяти с тем, что я делаю

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...