Android 架构组件 (Lifecycle/ViewMode

2022-10-12  本文已影响0人  行走中的3卡

引入:
AndroidX 库提供了一些架构组件,如Lifecycle /ViewModel/Livedata,
初衷应该是减少Activity/Fragment的代码量,以组合的方式添加到Activity/Fragment中。
能够很方便地感知生命周期的变化(如onCreate/onResume等等),
同时更好地管理数据(如转屏保留数据)。

虽然,我们平时可能接触不多,可能是因为这个架构组件比较新,
而所负责的项目是很久就创建的。
但是,现在官方的一些Demo样例中,经常会遇到。
所以,了解这些组件有助于更快地学习,起到事半功倍的效果。

1. 开发者官网指南:

https://developer.android.com/topic/libraries/architecture/lifecycle

Lifecycle/ViewModel/LiveData 这几个关键组件都是在 androidx.lifecycle 包。

题外话关于AndroidX
(1)AndroidX 库独立于Android SDK,更新迭代更快些。
(2)AndroidX 提供的这些组件,目的是给开发者提供更加稳定、通用的应用框架,
开发者可以把精力和重点放在独有的业务逻辑上。

2. Lifecycle/ViewModel/LiveData 实例Demo

官方提供例子,手把手教学,快速接触这些组件。
https://developer.android.com/codelabs/android-lifecycles?index=..%2F..%2Findex#0

Github源码:
https://github.com/googlecodelabs/android-lifecycles

3. 升级版实例 Demo

建议反复观看
Lifecycle/ViewModel/LiveData+ Databinding + Room (经典,结合数据库)
https://github.com/android/architecture-components-samples/tree/main/BasicSample

4. 初步总结

(1) Lifecycle 及其 相关类.
作用: 抽象类,用于感知Activity/Fragment生命周期。
相当于给外界提供一个接口,生命周期由它传递 给外界。(外界通过实现接口回调)
实现: ComponentActivity/Fragment 均实现LifecycleOwner接口(该接口仅有一个函数 getLifecycle )
相当于实现了Lifecycle。 实际上它的实现类是LifecycleRegistry,getLifecycle正是返回这类的实例。

后续还写一个篇 关于这个组件的 源码分析.
Android 架构组件之 Lifecycle/LifecycleOwner/LifecycleRegistry/LifecycleObserver 源码学习

(2) ViewModel:
作用: 抽象类,准备及管理Activity/Fragment的数据。
创建位置: 在 Activity/Fragment里
生命周期:一直存在Activity/Fragment finised(转屏onDestory没finish)

(3) LiveData<T> :
作用: 抽象类, 提供可观察的数据,在数据发生变化后可以通知到观察者。
通知数据更新的方式: postValue(后台)/setValue(前台)
实现类: MutableLiveData<T>

5. 使用问题记录:

(1) ViewModel 子类的获取方式

例如:
mSeekBarViewModel = new ViewModelProvider(requireActivity()).get(SeekBarViewModel.class);
这里是在Fragment 里面的,需要两个Fragment 同步数据的话(在同一个Activity上显示),必须传递ower 为activity 非this(fragment)

(2) ViewModel 使用 SavedStateHandle 保存持久性数据

SavedStateHandle内部封装了 LiveData
-- 实测设备,在adb kill / forc-stop app 或者 最近任务关闭应用后,再次进入并没有恢复数据

上一篇下一篇

猜你喜欢

热点阅读