【发布时间】:2021-07-27 16:26:22
【问题描述】:
我已经从片段中的共享视图模型收集流:
private val viewModel: MyViewModel by sharedViewModel()
private fun observeViewModelStateFlowData() {
job = lifecycleScope.launch {
viewModel.stateFlowData.collect {
when (it) {
is ViewStates.Success -> handleSuccess(it.data)
}
}
}
}
在 ViewModel 中:
private val _stateFlowData = MutableStateFlow<ViewStates<Model>>(ViewStates.Idle)
val stateFlowData: StateFlow<ViewStates<Model>> get() = _stateFlowData
但是当我转到下一个片段并再次回到这个片段时,再次收集流。 我在片段的 onStop() 生命周期方法中取消了作业:
override fun onStop() {
job?.cancel()
super.onStop()
}
但不能取消并再次收集!!!
即使我离开活动(当视图模型被清除)并再次回到活动时也会发生这种情况!!!
我该怎么做才能防止流量聚集?
【问题讨论】:
-
onStop 只有在你替换片段时才会被调用,而不是在你使用 add 时。
标签: android kotlin-coroutines kotlinx.coroutines.flow