Jetpack

ViewModel

被设计用来保存与UI相关的数据,并且它是可以感知生命周期变化的

// 在系统第一次调用onCreate()方法时创建一个ViewModel,注册一个观察者
    MyViewModel model = ViewModelProviders.of(this).get(MyViewModel.class);
    model.getUsers().observe(this, users -> {
       // 更新UI
    });
ViewModel生命周期

在Activity下是在finished的时候,在Fragment下是detached的时候。

ViewModelProviders

其实是ViewModelStore的一个实用类,它在内部引用ViewModelStore返回ViewModel实例(如果存在,否则就创建一个并保存下来)。

ViewModelStore内部使用HashMap跟踪ViewModel

LiveData

是一个可观测的数据持有类,但是不同于通常的被观察者,LiveData 具有生命周期感知能力

  • LiveData和LifeCyclerOwner 相互绑定,实现对生命周期的感知
  • dispatchValue 判断onActive,只通知active观察者,onInactive不通知
    https://www.jianshu.com/p/d66b2fd4d918
LiveData 的优势
确保UI和数据状态匹配。

当数据发生改变的时候,会自动通知UI进行更新。

避免内存泄漏

Observers 是绑定到 Lifecycle 对象上的,当与其关联的 lifecycle 被销毁的时候,它们会自动被清理。

避免了由于 Activity 停止而导致的闪退

当 Observer 所绑定的 Lifecycle 处于非活跃状态时,比如处于返回栈中的 Activity,它将不会收到任何 LiveData 事件。

不再需要手动处理生命周期

UI组件只需要对相关的数据进行监听,不需要关心是否应该暂停或者恢复监听。LiveData 具有生命周期感知能力,它会自动对这些进行管理。

数据总处于最新状态

如果一个 Lifecycle 处于非活跃状态,那当它由非活跃状态变为活跃状态的时候,它将收到最新的数据。比如一个 Activity 由后台转为前台,这时候它将立即收到最新的数据

系统配置更改时,进行数据的保存和恢复,及 UI 的恢复。

当 Activity 或者 Fragment 由于配置更改而重新创建时(比如旋转屏幕等),它将收到最新的可用数据。这里简单提一点,这个有点是需要配合 ViewModel 使用的,严格来说,它主要是 ViewModel 的优点

资源共享

我们可以使用单例模式来扩展 LiveData,这样就能达到数据变化的时候,通知所有的观察者

MediatotLiveData
MutableLiveData

https://github.com/CymChad/BaseRecyclerViewAdapterHelper
BaseQuickAdapter

WorkManager

Android架构组件WorkManager详解
WorkManager对比JobScheduler, AlarmManger的优势:我们要知道虽然AlarmManager是一直存在但是JobScheduler是Android 5.x之后才有的。
WorkManager的底层实现,会根据你的设备API的情况,自动选用JobScheduler, 或是AlarmManager来实现后台任务。
WorkManager对比AsyncTask, ThreadPool的优势:WorkManager里面的任务在应用退出之后还可以继续执行。
AsyncTask, ThreadPool里面的任务在应用退出之后不会执行。

jetpack知识梳理博客
https://www.jianshu.com/p/ee6b81b9777a

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值