Post多个MutableLiveData没有顺序

Post multiple MutableLiveData have no order

我在 MVVM 架构上使用多个 MutableLiveData。 在 ViewModel 上,我 post 对象但片段未恢复。 当片段恢复时,观察者得到 MutableLiveData 但不是按照我 post 他们的顺序。 如何强制执行获取 MutableLiveData 的命令?

视图模型:

void foo(){

first_MutableLiveData.post(newData)

second_MutableLiveData.post(newData)

}

片段:

initView(){

first_MutableLiveData.observe(this,()->{
"getting called second"})

second_MutableLiveData.observe(this,()->{
"getting called first"})

}

你不能强迫你想要什么。从代码中可以看出,他们通过调用将结果发布到 MainThread:

ArchTaskExecutor.getInstance()  

所以现在有人会费心去支持两个不同的 LiveData 对象之间的同步。这样做是你的工作。这是一个角落案例。

只需使用 setValue,而不是直接在 MainThread 上使用 postValue。这是一个例子。

public class MainThreadExecutor 实现Executor {

    private final Handler handler = new Handler(Looper.getMainLooper());

    @Override
    public void execute(Runnable runnable) {
        handler.post(runnable);
    }
}

public class YourClass {

    MutableLiveData first_MutableLiveData = new MutableLiveData<Data>();
    MutableLiveData second_MutableLiveData = new MutableLiveData<Data>();


    private final Executor executor;

    public YourClass(Executor executor) {
        this.executor = executor;
    }


    void foo(){

        executor.execute(new Runnable(){
            @Override
            public void run() {
                first_MutableLiveData.setValue(newData);
                second_MutableLiveData.setValue(newData);
            }
        });

    }

}

所以很明显,当我更改观察者在片段上的顺序时,它们按照我需要的顺序到达。感谢大家的快速回复!