大放光彩的安卓Jetpack组件-ViewModel(一)

简介: 在项目中,我遇到了一个问题,起因则是无法实时去获取信息来更新UI界面,因为我需要知道我是否获取到了实时信息

引言

在项目中,我遇到了一个问题,起因则是无法实时去获取信息来更新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如何大放光彩!

相关文章
|
3天前
|
安全 Java Android开发
探索安卓应用开发的新趋势:Kotlin和Jetpack Compose
在安卓应用开发领域,随着技术的不断进步,新的编程语言和框架层出不穷。Kotlin作为一种现代的编程语言,因其简洁性和高效性正逐渐取代Java成为安卓开发的首选语言。同时,Jetpack Compose作为一个新的UI工具包,提供了一种声明式的UI设计方法,使得界面编写更加直观和灵活。本文将深入探讨Kotlin和Jetpack Compose的特点、优势以及如何结合使用它们来构建现代化的安卓应用。
13 4
|
13天前
|
存储 搜索推荐 Java
探索安卓开发中的自定义视图:打造个性化UI组件Java中的异常处理:从基础到高级
【8月更文挑战第29天】在安卓应用的海洋中,一个独特的用户界面(UI)能让应用脱颖而出。自定义视图是实现这一目标的强大工具。本文将通过一个简单的自定义计数器视图示例,展示如何从零开始创建一个具有独特风格和功能的安卓UI组件,并讨论在此过程中涉及的设计原则、性能优化和兼容性问题。准备好让你的应用与众不同了吗?让我们开始吧!
|
13天前
|
XML 搜索推荐 Android开发
安卓开发中的自定义View组件实践
【8月更文挑战第30天】探索Android世界,自定义View是提升应用界面的关键。本文以简洁的语言带你了解如何创建自定义View,从基础到高级技巧,一步步打造个性化的UI组件。
|
2月前
|
存储 数据库 Android开发
🔥Android Jetpack全解析!拥抱Google官方库,让你的开发之旅更加顺畅无阻!🚀
【7月更文挑战第28天】在Android开发中追求高效稳定的路径?Android Jetpack作为Google官方库集合,是你的理想选择。它包含多个独立又协同工作的库,覆盖UI到安全性等多个领域,旨在减少样板代码,提高开发效率与应用质量。Jetpack核心组件如LiveData、ViewModel、Room等简化了数据绑定、状态保存及数据库操作。引入Jetpack只需在`build.gradle`中添加依赖。例如,使用Room进行数据库操作变得异常简单,从定义实体到实现CRUD操作,一切尽在掌握之中。拥抱Jetpack,提升开发效率,构建高质量应用!
49 4
|
21天前
|
开发工具 Android开发
Android项目架构设计问题之组件A通知组件B某个事件的发生如何解决
Android项目架构设计问题之组件A通知组件B某个事件的发生如何解决
27 0
|
2月前
|
存储 前端开发 测试技术
Android Kotlin中使用 LiveData、ViewModel快速实现MVVM模式
使用Kotlin实现MVVM模式是Android开发的现代实践。该模式分离UI和业务逻辑,借助LiveData、ViewModel和DataBinding增强代码可维护性。步骤包括创建Model层处理数据,ViewModel层作为数据桥梁,以及View层展示UI。添加相关依赖后,Model类存储数据,ViewModel类通过LiveData管理变化,而View层使用DataBinding实时更新UI。这种架构提升代码可测试性和模块化。
130 2
|
2月前
|
存储 移动开发 Android开发
使用kotlin Jetpack Compose框架开发安卓app, webview中h5如何访问手机存储上传文件
在Kotlin和Jetpack Compose中,集成WebView以支持HTML5页面访问手机存储及上传音频文件涉及关键步骤:1) 添加`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_STORAGE`权限,考虑Android 11的分区存储;2) 配置WebView允许JavaScript和文件访问,启用`javaScriptEnabled`、`allowFileAccess`等设置;3) HTML5页面使用`<input type="file">`让用户选择文件,利用File API;
|
2月前
|
机器学习/深度学习 人工智能 算法
探索AI在医疗影像分析中的应用探索安卓开发中的自定义View组件
【7月更文挑战第31天】随着人工智能技术的飞速发展,其在医疗健康领域的应用日益广泛。本文将聚焦于AI技术在医疗影像分析中的运用,探讨其如何通过深度学习模型提高诊断的准确性和效率。我们将介绍一些关键的深度学习算法,并通过实际代码示例展示这些算法是如何应用于医学影像的处理和分析中。文章旨在为读者提供对AI在医疗领域应用的深刻理解和实用知识。
29 0
|
2月前
|
XML 存储 API
Jetpack初尝试 NavController,LiveData,DataBing,ViewModel,Paging
Jetpack初尝试 NavController,LiveData,DataBing,ViewModel,Paging
|
3月前
|
Android开发
Jetpack Compose: Hello Android
Jetpack Compose: Hello Android