使用ShareFlow和StateFlow时,应用程序从后台返回时显示相同的值

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

我目前在 Android 上使用

StateFlow
SharedFlow

订阅

SharedFlow
中的
ViewModel
中的
Activity
时,使用
repeatOnLifecycle()
根据生命周期取消和恢复订阅。

第一次。在这种状态下运行应用程序,显示“100”的吐司消息,然后将应用程序切换到后台状态并再次查看屏幕,再次显示“100”的吐司消息。

我不希望这种事发生。

如果应用程序从后台返回时是相同的值,我不想看到 toast 消息。我该如何处理这个问题??

活动中

lifecycleScope.launch {             
    repeatOnLifecycle(Lifecycle.State.STARTED) {
        mainViewModel.a.collect {  
            Toast.makeText(this@MainActivity, it, Toast.LENGTH_SHORT).show() 
        }                
    }             
}         

视图模型

@HiltViewModel
class MainViewModel @Inject constructor() : ViewModel() {
    private val _a = MutableSharedFlow<Int>(replay = 1)
    val a = _a.asSharedFlow()

    init {
        viewModelScope.launch {
            _a.emit(100)
        }
    }
}
android android-lifecycle kotlin-stateflow kotlin-sharedflow
1个回答
0
投票

这就是 SharedFlow 的行为,它们可以发出相同的值,如果您希望收集器仅收集唯一值,请改用 StateFlow。

© www.soinside.com 2019 - 2024. All rights reserved.