android - 默认情况下,是否在主线程上执行Mediator LiveData的addSource onChange回调?

原文 标签 android kotlin android-livedata

从文档中:

addSource (LiveData source, Observer onChanged)

Starts to listen the given source LiveData, onChanged observer will be called when source value was changed.

onChanged callback will be called only when this MediatorLiveData is active.

If the given LiveData is already added as a source but with a different Observer, IllegalArgumentException will be thrown.



从源代码中可以看出,addSource函数始终在主线程上执行。
@MainThread
public <S> void addSource(@NonNull LiveData<S> source, @NonNull Observer<? super S> onChanged) ...

这是否意味着提供给addSource方法的回调也可以在主线程上运行?

我想了解这一点,因为我想在回调中执行setValue,并且setValue需要在主线程上运行。

我想做类似的事情:
viewState.addSource(someLiveData) { networkResourceResult ->
    viewState.value = currentViewState().copy(showLoadingSpinner = networkResource.status)
}


那么这将是安全的事情吗?

最佳答案

您应该使用postValue()方法来设置工作线程中的值

You must call the setValue(T) method to update the LiveData object from the main thread. If the code is executed in a worker thread, you can use the postValue(T) method instead to update the LiveData object.



浏览Update LiveData objects段落

关于android - 默认情况下,是否在主线程上执行Mediator LiveData的addSource onChange回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56942527/

相关文章:

java - 如何为android绑定(bind)多个不同的服务?

kotlin - 如何初始化通用声明的 Kotlin MutableStateFlow

android - this@MainActivity 的代码是什么意思?

android - 实现 MVVM LiveData RxJava Dagger Databinding 的正确结构?

android - 尝试在空对象引用上调用虚拟方法 'void android.arch.lifecycle.MutableLiveData.setValue(java.lang.Object)'

android - Room - 数据库 '/data/.../db' 的连接池在 X 秒内无法授予与标志为 0x2 的线程的连接

android - 在 Web/移动应用程序中使用 OAuth/OpenID

java - 使用StaggeredGridLayotManager吗?

android - 布局类型之间的权衡

java - 更改TornadoFX TableView行背景颜色,同时仍突出显示所选行