Android Jetpack组件ViewModel基本用法详解

 更新时间:2023年01月30日 08:44:58   作者:小宇渣渣渣  
这篇文章主要为大家介绍了Android Jetpack组件ViewModel基本用法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

天道好轮回,终于星期五,但是还是忙碌了一天。在项目中,我遇到了一个问题,起因则是无法实时去获取信息来更新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中添加依赖,如下:

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

添加好依赖后就可以使用,但需要注意的是,良好的编程写法是给每一个Activity和Fragment都创建对应的ViewModel,如下:

class MainView :ViewModel() {
}
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如何大放光彩!

更多关于Android Jetpack组件ViewModel的资料请关注脚本之家其它相关文章!

相关文章

  • Android自动提示控件AutoCompleteTextView

    Android自动提示控件AutoCompleteTextView

    这篇文章主要介绍了Android自动提示控件AutoCompleteTextView的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Android实现掷骰子效果

    Android实现掷骰子效果

    这篇文章主要为大家详细介绍了Android实现掷骰子效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • Android中Glide加载圆形图片和圆角图片实例代码

    Android中Glide加载圆形图片和圆角图片实例代码

    本篇文章主要介绍了Android中Glide加载圆形图片和圆角图片实例代码,具体一定的参考价值,有兴趣的可以了解一下
    2017-05-05
  • 使用RecyclerView添加Header和Footer的方法

    使用RecyclerView添加Header和Footer的方法

    RecyclerView虽然作为ListView的替代者有着较好的性能提升,但是ListView的一些常用功能却没有提供,比如我们平时会经常用到的addHeaderView,addFooterView,既然RecyclerView没有提供这个方法,我们应该如何为列表添加头部和底部呢,接下来通过本文给大家介绍
    2016-03-03
  • Android仿手机通讯录地址选择功能

    Android仿手机通讯录地址选择功能

    这篇文章主要为大家详细介绍了Android仿手机通讯录地址选择功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • android读取assets文件示例

    android读取assets文件示例

    这篇文章主要介绍了android读取assets文件示例,需要的朋友可以参考下
    2014-02-02
  • Android apk 项目一键打包并上传到蒲公英的实现方法

    Android apk 项目一键打包并上传到蒲公英的实现方法

    这篇文章主要介绍了Android apk 项目一键打包并上传到蒲公英,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Android View的事件分发机制

    Android View的事件分发机制

    本文主要介绍了Android View的事件分发机制。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • Android开发基础实现音频文件的播放详解

    Android开发基础实现音频文件的播放详解

    这篇文章主要为大家介绍了Android开发基础实现音频文件的播放详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 解决Android Studio 出现“Cannot resolve symbol” 的问题

    解决Android Studio 出现“Cannot resolve symbo

    今天在调试的时候,Android Studio报了一个莫名其妙的错误Cannot resolve symbol'R'让人不知所措,因为这东西根本不归我管啊,怎么会出现 Cannot resolve symbol 这种错误呢?下面给大家分享Android Studio 出现“Cannot resolve symbol”解决方案,需要的朋友可以参考下
    2023-03-03

最新评论