Android Jetpack架构组件之ViewModel入门到精通

要想获得食物,就必须一直寻找,只有这样,才有机会。不要气馁,就算找不到肥羊,至少能找到一只兔子——《狼道》

前言

一、简介

(1)ViewModel是什么

(2)ViewModel有什么用

(3)有什么优点

​二、基本使用

(1)添加依赖

(2)继承ViewModel

(3)使用方式

三、源码分析

四、总结

五、内容推荐

六、项目参考


前言

——这篇主要是梳理一下Jetpack架构组件之一的ViewModel,并结合楼主所学做个总结。面向那些还不认识ViewModel的同学们。看完这篇可以快速了解它,并轻松使用。也想请教前辈们指点文章中的错误或不足的地方。本篇只针对ViewModel,不会拓展额外的知识如MVVM,若想了解更多关于Jetpack组件知识可以看楼主写的Jetpack专栏。

一、简介

(1)ViewModel是什么

——ViewModel 是google推出的Jetpack架构组件之一,设计成以生命周期的方式存储和管理UI相关的数据。

举个列子来消化一下:

——当发生横竖屏切换或其他意外导致Activity重启时,里面的临时数据将会丢失。以前可以利用onSaveInstanceState()保存简单的数据并在onCreate()中恢复,但只适用于少量可以序列化反序列化的数据,并不能适用于任何情况。这时就可以使用ViewModel来管理这些数据。当然ViewModel并不只 只有这个作用。

那ViewModel为什么可以管理这些数据呢?

主要还是因为ViewModel的生命周期比Activtiy生命周期来的更长。如:

Illustrates the lifecycle of a ViewModel as an activity changes state.

这就要求我们在onCreate()方法时就启动ViewModel。

从图中可以看出当Activity意外重启时,ViewModel也一直存活,所以把数据存交给ViewModel管理后就不会意外丢失数据。

(2)ViewModel有什么用

  1. 可以存储和管理因Activity意外重启(如:屏幕切换)丢失的数据。
  2. 可以管理Acitvity中使用的异步调用,或监听事件因Activity销毁而没有及时清理造成的内存泄漏。
  3. 可以将Activity中有关数据获取的操作移到ViewModel里面,实现视图与数据相互分离,更容易维护。
  4. 可以在Fragment之间共享数据。

(3)有什么优点

针对用法,可以得出以下优点:

  1. 存储和管理数据
  2. 避免内存泄漏
  3. 解耦
  4. 共享数据

​二、基本使用

(1)添加依赖

可以使用androidx的appcompat,里面包含许多的依赖,包括viewodel。

implementation 'androidx.appcompat:appcompat:1.0.0'

当然也可以添加自己熟悉的版本,每个版本使用方式都有稍微差别:

    implementation 'androidx.lifecycle:lifecycle-viewmodel:2.1.0'

楼主这边要分析的是官网上的例子,所以添加的依赖是:

implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'

这个依赖主要作用是在使用ViewModel的基础上多封装了一个ViewModelProviders类。

(2)继承ViewModel

因为ViewModel是个抽象类,所以需要声明一个类来继承它。

public class MyViewModel extends ViewModel {
    private String name ="张三";
    private String data ="网络数据";
    //获取用户名字
    public String getUserName(){
        return name;
    }
    //获取数据
    public String loadData(){
        //加载网络数据的逻辑
        return data;
    }
}

其实这边获取网络数据的时候可以配合LiveData一起使用,因为加载网络数据都会有一点的延迟。并能立即就得到数据,所以使用liveData的话,当有数据回调的时候,可以通知UI更新。但这边只单纯介绍ViewModel,就不详细说明了。想要了解LiveData 请看

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值