美文网首页
Android 架构组件 (Lifecycle/ViewMode

Android 架构组件 (Lifecycle/ViewMode

作者: 行走中的3卡 | 来源:发表于2022-10-12 16:21 被阅读0次

    引入:
    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 或者 最近任务关闭应用后,再次进入并没有恢复数据

    相关文章

      网友评论

          本文标题:Android 架构组件 (Lifecycle/ViewMode

          本文链接:https://www.haomeiwen.com/subject/adotzrtx.html