我是否正确取消协程

时间:2019-05-03 20:38:56

标签: android kotlin android-architecture-components android-viewmodel kotlin-coroutines

我有这样的视图模型

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

或者我做的还好吗?我只想确保自己不会因执行的操作而造成内存泄漏

0 个答案:

没有答案