Android LifeCycle、ViewModel、LiveData
首先为什么需要这些
在开发中,我们时常需要和Activity、Fragment 的生命周期打交道,它们本身也提供了各自一套生命周期的方法,我们只需要在相应的方法里面做正确的事情即可,但是我们有没有想过,这样对于 Activity 和 Fragment 来说,功能过于复杂了,那么如何将这一块业务逻辑从我们的视图之中迁移到业务层呢?
当我们开发的APP 需要适配键盘状态、屏幕旋转、语言变化等 configure 改变会导致 Activity销毁重建,这个时候 Activity 持有的数据就会全部丢失,在Activity 重建之后我们又要去重新获取数据,这期间可能会对用户体验造成不良影响,传统的解决办法是在 onSaveInstanceState方法中保存,在 onCreate中恢复,这样不仅会让 UI 层代码臃肿,而且存储的数据还必须是可序列化的。那么有没有办法将这部分逻辑从 UI 层中移除呢?
LiveData,其实也就是注册监听属性变化的时候传入一个 LifecycleOwner,然后在回调数据改变方法之前判断当前的 Activity、Fragment 是否可见,如果不可见则不进行回调。在 Activity、Fragment 重新变得可见的时候会回调 LifecycleOwner 相应的方法,在这些方法里面让 LiveData 去检查视图最后接收到的值是否为最后一个改变的值,如果不是,则同步值到视图观察者即可。
至于说什么时候使用这三个组件,这里我简单说一下我的看法,首先 LifecycleOwner 和 ViewModel 是一定要处处用到的,具体原因上面也说了,虽然人家叫做 ViewModel,但是对于我们选择用 MVP 或者是 MVVM 并没有什么冲突,因为ViewModel 的概念和这两种架构没有冲突,所以剩下的就是 LiveData 了,LiveData 的使用场景适合在一个信号量在多处改变的时候使用,当一个信号量只在一个地方改变,那么用不用 LiveData 其实差不不大。所以我的定位是一个信号量在多处地方改变的时候
作者:Little_Mango
链接:https://www.jianshu.com/p/d0ac108b7698
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
LiveData:基于观察者模式,通过回调更新view

浙公网安备 33010602011771号