Анд*_*гач 4 kotlin rx-java2 android-livedata
在这种情况下需要观察或在 livedata 中发布值本身就足以正确处理它。
method()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ liveData.postValue(it) },
{ Timber.e(it) }
)
Run Code Online (Sandbox Code Playgroud)
observeOn将强制它下面的所有操作在您作为参数传递的调度程序的线程上运行。在这种情况下,您强制订阅在主线程上工作。阅读本文了解更多信息。
Livedata有两种更新其值的方法:你要么做livedata.setValue(newValue)(livedata.value = newValue在 Kotlin 中)要么livedata.postValue(newValue). 第一个选项仅适用于主线程。另一方面,postValue通常用于从后台线程设置值(后台线程实际上发布了一个任务供主线程更新值)。
鉴于所有这些,在这种情况下,由于您使用的是postValue,因此您无需在主线程上强制订阅。但是,请注意,由于postValue不是同步的,因此从主线程调用它并不能保证立即执行。例如,在您的订阅者中,如果您调用 alivedata.postValue(newValue)后跟livedata.setValue(anotherValue),setValue将首先执行。换句话说,您livedata的值将设置为anotherValue,然后被覆盖为newValue。如果要保持在主线程中执行,请使用setValue.
| 归档时间: |
|
| 查看次数: |
338 次 |
| 最近记录: |