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);
}
});
}
}
所以很明显,当我更改观察者在片段上的顺序时,它们按照我需要的顺序到达。感谢大家的快速回复!
我在 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);
}
});
}
}
所以很明显,当我更改观察者在片段上的顺序时,它们按照我需要的顺序到达。感谢大家的快速回复!