Bug还原
在Activity中保存一个ViewModel,使用Navigation组件和Fragment实现页面的切换,AFragment获取Activity的ViewModel并注册LiveData数据为观察者,此时使用setValue让AFragment收到一次LiveData数据,然后切换到BFragment(AFragment销毁),之后切回AFragment,会发现重新注册LiveData数据,AFragment再次收到LiveData数据。
原因分析
官方介绍LiveData会一直向活跃的应用组件观察者发送数据,而使用Naviagtion组件时,博主实现的方案导致了每次切换页面都会重走一次Fragment的生命周期,也就是处于“STARTED 或 RESUMED 状态”,导致了从其他页面切换回来之后,会触发LiveData的数据回调。
这里其实是博主对于ViewModel的生命周期理解不够透彻,在AFragment中调用Activity中的ViewModelÿ