而在协程 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) {
立即终止循环。
我正在使用协程 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) {
立即终止循环。