一般我们在连续多次调用postValue时会出现只有最后一个值通知观察者返回过来,也就是说多次调用postValue时,只有最后一次调用是有效的,而setValue时每一个值的变化都会通知到观察者,也就是说每一次调用都是有效的,那么这是为什么?且看postValue的源码:
protected void postValue(T value) {
boolean postTask;
synchronized (mDataLock) {
postTask = mPendingData == NOT_SET;
mPendingData = value;
}
if (!postTask) {
return;
}
ArchTaskExecutor.getInstance().postToMainThread(mPostValueRunnable);
}
在设置多次值的时候,比如一次设置值为0到2,第一次进这个方法的时候,mPendingData的值为NOT_SET,所以postTask的值true,所以if (!postTask) {
return;
}