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编程实现获取标题栏、状态栏的高度、屏幕大小及模拟Home键的方法

    Android编程实现获取标题栏、状态栏的高度、屏幕大小及模拟Home键的方法

    这篇文章主要介绍了Android编程实现获取标题栏、状态栏的高度、屏幕大小及模拟Home键的方法,涉及Android获取手机常见信息的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • Android使用动画动态添加商品进购物车

    Android使用动画动态添加商品进购物车

    这篇文章主要为大家详细介绍了Android使用动画动态添加商品进购物车,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • android app icon 图标大小尺寸

    android app icon 图标大小尺寸

    应用程序图标 (Icon)应当是一个 Alpha 通道透明的32位 PNG 图片。由于安卓设备众多,一个应用程序图标需要设计几种不同大小。
    2016-05-05
  • Android实现卡片翻转动画

    Android实现卡片翻转动画

    这篇文章主要为大家详细介绍了Android实现卡片翻转动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Android fragment 转场动画创建步骤

    Android fragment 转场动画创建步骤

    在 Android 中,可以使用 setCustomAnimations() 方法来绘制自定义的 Fragment 转场动画,本文分步骤给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • Android7.0以上Uri转路径的方法实现(已验证)

    Android7.0以上Uri转路径的方法实现(已验证)

    这篇文章主要介绍了Android7.0以上Uri转路径的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Flutter控件之实现Widget基类的封装

    Flutter控件之实现Widget基类的封装

    在实际的开发中,Widget的基类还是很有必要存在的,不然就会存在很多的冗余嵌套代码,本文为大家介绍了Flutter中基类是如何封装的,需要的可以收藏一下
    2023-05-05
  • android控件封装 自己封装的dialog控件

    android控件封装 自己封装的dialog控件

    自定义dialog肯定是用的很多了 但是感觉每次做都是很乱单纯完成任务而已,现在封装了一下以后用到直接copy,需要的朋友可以参考下
    2012-11-11
  • View Controller Transition实现京东加购物车效果

    View Controller Transition实现京东加购物车效果

    这篇文章主要介绍了View Controller Transition实现京东加购物车效果,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • Android数据流之Channel和Flow实现原理和技巧详解

    Android数据流之Channel和Flow实现原理和技巧详解

    在 Android 应用程序的开发中,处理异步数据流是一个常见的需求,为了更好地应对这些需求,Kotlin 协程引入了 Channel 和 Flow,它们提供了强大的工具来处理数据流,本文将深入探讨 Channel 和 Flow 的内部实现原理、高级使用技巧以及如何在 Android 开发中充分利用它们
    2023-11-11

最新评论