谈谈LiveData的生命周期是怎么监听的? (B站)
这道题想考察什么?
对Jetpack中Lifecycle与LiveData的原理以及两者之间联系的掌握
考察的知识点
- Lifecycle原理
- LiveData原理
考生应该如何回答
LiveData会持有可被观察的数据。 并且同时它也是一种可感知生命周期的组件,意味着该组件重视其他app组件的生命周期,如Activity、Fragment,该组件能确保,仅仅在Activity\Fragment等组件都处于活跃的生命周期状态的时候,才去更新app组件。
可以看到其实LiveData就是借助了Lifecycle感知生命周期的。将LifecycleBoundObserver wrapper
添加为观察者,当有生命周期变化时将会执行:onStateChanged
在activeStateChanged
中如果当前改变的状态为活跃状态(shouldBeActive():true),则会调用到considerNotify
方法通知数据更新:
数据在每次修改时,都会进行mVersion++,因此可以使用mVersion判断数据是否发生修改,如果未发生变化则不会发起回调。
所以,LiveData的生命周期是通过Lifecycle监听的,同时LiveData会维护一个mVersion作为数据的版本号。当数据有修改时,才会进行通知回调。