2)类图
-
Lifecycle组件成员Lifecycle被定义成了抽象类,LifecycleOwner、LifecycleObserver被定义成了接口。
-
组件(Activity、Fragment)实现了LifecycleOwner接口,该只有一个返回Lifecycle对象的方getLifecyle(): LifecycleRegistry。
-
Lifecycle的内部类State标明状态、Event表示事件
-
ObserverWithState的成员变量GenericLifecycleObserver继承自LifecycleObserver
2.2 ViewModel
-
一句话概述: ViewModel存储和管理 UI 相关数据,保证组件(Activity)重新创建时可以恢复历史数据。
-
生命周期转化图:
- 实现原理
(1)onRetainNonConfigurationInstance方法。 当发生屏幕切换时,将伴随Destroying被系统调用。通过这个方法可以像onSaveInstanceState()的方法一样保留变化前的Activity数据和状态,最大的不同在于这个方法可以返回一个包含有状态信息的Object对象,其中甚至可以包含Activity Instance本身。用这个方法保存Activity State后。
(2)通过getLastNonConfigurationInstance()在新的Activity Instance中恢复原有状态。比如: 在恢复窗口时,我们可以不使用onRestoreInstanceState,而代替的是 getLastNonConfigurationInstance 方法。
2.3 LiveData
-
一句话概述: LiveData 是保存数据对象的类,通过注册监听器Observer 监听数据的变化。LiveData最大的优势:LiveData 是感知Activity、Fragment等生命周期的组件。
-
实现原理
(1)使用LifecycleOwner的observe() 方法将观察者对象附加到LiveData对象,将观察者向LiveData对象订阅,以便通知LiveData中数据的变化。
(2)当Lifecycle 没有处于活动状态( (STARTED 、RESUMED)),Observer 则不会被通知,即使数据发生了变化,没有处于活动状态的 Observer 也不会被通知。
(3)Lifecycle 被销毁(destroyed)Observer 也自动被删除,无需用户手动清理。 避免内存泄漏:Observer 和 Lifecycle 绑定,可以感知组件生命周期,所以当 Life