我们先来看下postValue的内部源码实现:
image.png
postTask = mPendingData == NOT_SET,第一次调用postValue,postTask 为true,因为:
image.png
然后将我们的value赋值给全局变量mPendingData,接下去判断,然后执行mPostValueRunnable:
image.png
这里面将mPendingData重新赋值给newValue并把mPendingData 重置为NOT_SET,这样一次完整的发送就结束了。
因此当我们多次postValue时,除了第一次,后面的几次会把mPendingData 重新赋值,而postTask都是等于false会被return,并不会执行mPostValueRunnable方法。
总结就是在第一次还没执行完mPostValueRunnable时,mPendingData被不断的重新赋值,导致真正执行到mPostValueRunnable时,mPendingData值就是你最后一次postValue的值。
网友评论