LiveData多次postValue,onChanged只收到
2022-03-17 本文已影响0人
ana生
我们先来看下postValue的内部源码实现:

postTask = mPendingData == NOT_SET,第一次调用postValue,postTask 为true,因为:

然后将我们的value赋值给全局变量mPendingData,接下去判断,然后执行mPostValueRunnable:

这里面将mPendingData重新赋值给newValue并把mPendingData 重置为NOT_SET,这样一次完整的发送就结束了。
因此当我们多次postValue时,除了第一次,后面的几次会把mPendingData 重新赋值,而postTask都是等于false会被return,并不会执行mPostValueRunnable方法。
总结就是在第一次还没执行完mPostValueRunnable时,mPendingData被不断的重新赋值,导致真正执行到mPostValueRunnable时,mPendingData值就是你最后一次postValue的值。