我們先來看下postValue的內(nèi)部源碼實現(xiàn):
image.png
postTask = mPendingData == NOT_SET,第一次調(diào)用postValue,postTask 為true,因為:
image.png
然后將我們的value賦值給全局變量mPendingData,接下去判斷,然后執(zhí)行mPostValueRunnable:
image.png
這里面將mPendingData重新賦值給newValue并把mPendingData 重置為NOT_SET,這樣一次完整的發(fā)送就結(jié)束了。
因此當我們多次postValue時,除了第一次,后面的幾次會把mPendingData 重新賦值,而postTask都是等于false會被return,并不會執(zhí)行mPostValueRunnable方法。
總結(jié)就是在第一次還沒執(zhí)行完mPostValueRunnable時,mPendingData被不斷的重新賦值,導(dǎo)致真正執(zhí)行到mPostValueRunnable時,mPendingData值就是你最后一次postValue的值。