继续创作,加速成长!这是我参与「日新方案 · 10 月更文应战」的第14天,点击查看活动详情,期望大家多多支撑,帮忙点个赞,谢谢!

引言

天道好轮回,总算星期五,但是还是忙碌了一天。在项目中,我遇到了一个问题,起因则是无法实时去获取信息来更新UI界面,由于我需求知道我是否获取到了实时信息,我想到的办法有三,运用Handler收发消息在子线程与主线程切换然后更新信息,其二则是运用在页面重绘的时候(一般是页面变化如跳转下个页面和将运用切至后台),其三便是运用Jetpack中最重要的组件之一ViewModel,最后我还是挑选了ViewModel,由于感觉更便利。

言归正传

其实想到的前面两个办法并不牢靠,由于我不了解,而ViewModel,由于项目简直每个Activity都有对应的文件反而更为了解,所以接下来我就为大家从我作业出发介绍一下ViewModel。

一、概述与效果

其实Android平台上之所以会出现比如MVP、MVVM之类的项目构架,便是由于在传统开发形式下,Activity使命实在过重,它简直全能,既要管逻辑又要管UI显示,甚至还得管网络回调,如此等等,或许小项目还看不出来有啥问题,但在企业开发团队协作下,大型项目就会变得难以保护而且越来越臃肿,这便是架构区分之利所在。
而ViewModel的一个重要效果便是能够协助Activity去分管一部分作业,它是专门用于存放于界面相关数据的,这也代表只要在界面看到的数据,与它相关之变量都应放在ViewModel,而不是Activity,然后削减Activity中逻辑量。

当然上述都是理论上的,在作业中,咱们虽然用其削减activity的复杂度,但更重要的是,由于我是做摄像头方面的app,所以播放视频不可避免,这就导致反正屏切换很重要,说到这儿,就天然的不得不说到ViewModel的一个非常重要之特性。
首要,咱们先了解一下,当手机反正屏旋转时,Activity是会被从头创立的,这也表明存放在Activity的数据也会丢掉,而ViewModel于=与Activity的生命周期不一样,它能确保手机屏幕旋转时不会被从头创立,只有当Activity退出时而一起毁掉,这也就导致了ViewModel中能够用来保持界面上的数据然后不被旋转屏幕时丢掉。

二、基本用法

介绍完它的效果与特性,咱们来看看它是怎样用的。
首要Jetpack组件通常在AndroidX库形式发布,所以常用组件会在创立项目之时就自动包括进去,但想要运用ViewModel,则需求额外在gradle中增加依靠,如下:

image.png

implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"

增加好依靠后就能够运用,但需求留意的是,良好的编程写法是给每一个Activity和Fragment都创立对应的ViewModel,如下:

class MainViewViewModel() {
}
package com.example.myapplication
import android.os.Bundle
import android.os.PersistableBundle
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProvider
class MainActivity : AppCompatActivity() {
    lateinit var viewModel: MainViewModel
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
    }
}

主要便是这样增加到咱们的Activity上。

小结

下一节咱们将具体分析代码,看看ViewModel怎么大放光彩!