无法取消以viewModelScope开始的协程

问题描述 投票:0回答:1

我正在kotlin的viewModel的init内部启动协程。协程在一个循环中侦听数据,一切正常,但是随着标题的建议,我无法取消该协程(或未调用viewmodel清除),因为它保持了连接状态。

// viewmodel
init {
    viewModelScope.launch {
        connector()
    }
}

override fun onCleared() {
    viewModelScope.cancel()
    super.onCleared()
}

suspend fun connector() = withContext(Dispatchers.IO){
    //val socket : Socket
    try {
             // connect socket
             // listen in loop
    } catch (Exception e){//whocares}

已经尝试在活动的按下时调用finish()(也尝试了一个片段)

android kotlin mvvm kotlin-coroutines android-viewmodel
1个回答
0
投票

这应该可以解决您的问题,将作业分配给变量,然后使用它来取消。

    var job : Job? = null

    // viewmodel
    init {
        job = viewModelScope.launch {
            connector()
        }
    }

    override fun onCleared() {
        job?.cancel()
        super.onCleared()
    }

    suspend fun connector() = withContext(Dispatchers.IO){
        //val socket : Socket
        try {
                 // connect socket
                 // listen in loop
        } ca
© www.soinside.com 2019 - 2024. All rights reserved.