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/

相关文章:

android - 我可以在不使用 android 上的 firebase 中的事件监听器的情况下获得值(value)吗?

android - java/kotlin 模块中的 Jetpack Paging 3

java - 注册观察者与设置处理程序

android - ViewModel 值更改时 UI 未更新

android - NoSuchMethodError : No interface method getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; in class Ljava/util/Map;

java - 如何在Android中获取当前系统日期?

android - 我想在android studio中使用限定符<large>,但是我不能添加目录layout-large

Android 10 无法删除多个文件(范围存储)

android-fragments - 没有主构造函数就不可能进行父类(super class)型初始化

android - android术语之间的区别?