- Android 架构组件 (Lifecycle/ViewMode
- Android架构组件(二)——LiveData
- Android Jetpack架构组件之 Lifecycles
- Android 官方架构组件(二)——LiveData
- Jetpack 架构组件之 Lifecycle (二) 使用
- Jetpack 架构组件之 Lifecycle (三) 原理
- 论 Android Jetpack 架构组件中 Lifecycl
- Android官方架构组件ViewModel:从前世今生到追本溯
- Android 架构组件之 Lifecycle/Lifecycl
- Android Jetpack架构组件:一文带你了解Lifecy
引入:
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 或者 最近任务关闭应用后,再次进入并没有恢复数据
网友评论