而在协程 LiveData 中为真

while true in Coroutine LiveData

我正在使用协程 livedata 每 4 秒做一些事情。这是我使用的代码

val reloadInterval: MutableLiveData<Long> = MutableLiveData()
val data = reloadInterval.switchMap { delay ->
    liveData(Dispatchers.IO) {
        while (true) {
            delay(delay)
            emit(data)
        }
    }
}

fun reloadInterval(interval: Long) {
    reloadInterval.value = interval
}

所以我的问题是,当我更改 reloadInterval 值时,switchMap 流被触发并且 return 一个新的实时数据然后旧的实时数据仍然 运行 还是会自动停止?

只要您不订阅旧的 livedata,它就应该变为非活动状态。有关详细信息,请参阅 LiveData.onInactive()

liveData { 协程构建器的 block 仅在 LiveData 处于活动状态时执行。块运行器在给定的超时时间后被取消,默认为 5 秒。

所以while(true) {会在5秒后停止。您可以通过 liveData(timeoutInMs = 0) { 立即终止循环。