livedata传相同的值会不会执行onchanged回调

今天突发奇想,livedata的回调方法名字是onChanged,看名字像是,在值变化了之后会进行回调,那么如果两次给MutableLiveData设置的值是完全一样的话,还会不会走onChanged回调呢?那么就有了接下来这个实验

一开始,我是在执行网络请求的时候将MutableLiveData进行初始化:

这样写,不管怎么想,都会回调的,起码两个变量的hashCode就不一样起码会根据hashCode进行比对的,对不对?

那么再修改下代码:

像这样将livedata设置成成员变量,就可以保证起码是同一个引用吗,在onChanged将结果打印出来

修改前:

修改后:

全部回调成功!ok,看下livedata源码是怎么写的,灵魂当然是postValue

然后是postToMainThread:

其中mDelegate是一个TaskExecutor,我们既然没有定义,那就DefaultTaskExecutor

可以看到是将值post到主线程进行改变,这就是为啥setValue一定要在主线程,子线程用postValue的原因了

那么最后还是调用的setValue,下面最重要的来了:

最最重要的mVersion字段,可以知道,每次postValue或者setValue,都会使它自增

这里的considerNotify就是通知给各位接收者了:

到这里一目了然,只要mVersion是大于等于之前的值,就会回调onChanged方法,也就是说,不管值是否相同,只看version的值,也就是基本只有int到达最大值的时候才会导致bug,2的31次方-1,估计只有无聊的人才会写改这么多次值的代码了。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值