LiveData多次postValue,onChanged只收到一次?

我们先来看下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的值。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容