Lifecycle:Lifecycle,顾名思义,是用于帮助开发者管理Activity和Fragment 的生命周期,它是LiveData和ViewModel的基础。Lifecycle用于存储有关组件(如 Activity 或 Fragment)的生命周期状态的信息,并允许其他对象观察此状态 Lifecycle核心原理:类似Glide,往Activity内部添加ReportFragment来获取生命周期回调,好处就是把这部分逻辑抽离出来,实现activity的无侵入。
LiveData:是一种可观察的数据存储器类。LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity/Fragment)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。 核心原理:LifecycleBoundObserver是LiveData的内部类,是对原始Observer的包装,把LifecycleOwner和Observer绑定在一起。当LifecycleOwner处于活跃状态,就称 LifecycleBoundObserver是活跃的观察者。在LifecycleOwner生命周期状态变化时 判断如果是DESTROYED状态,则移除观察者。LiveData自动移除观察者特点就来源于此。总结:LivaData通过observe()添加 与LifecycleOwner绑定的观察者;观察者变为活跃时回调最新的数据;使用setValue()、postValue()更新数据时会通知回调所有的观察者。
ViewModel:ViewModel,意为 视图模型,即 为界面准备数据的模型。简单理解就是,ViewModel为UI层提供数据但不会持有UI层引用,不会导致内存泄漏。ViewModel 以注重生命周期的方式存储和管理界面相关的数据。(作用);ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。(特点)生命周期比Activity长。 核心原理:onRetainNonConfigurationInstance在Activity因配置改变 而正要销毁时,且新Activity会立即创建,那么系统就会调用此方法。此方法中把包裹着ViewModelStore的NonConfigurationInstances返回给ActivityThread保存,在Activity重建的attach回调的时候会重新拿到这个NonConfigurationInstances。