我正在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()(也尝试了一个片段)
这应该可以解决您的问题,将作业分配给变量,然后使用它来取消。
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