ViewModel 和 LiveData 是 Android Jetpack 组件库中的两个核心组件,它们能帮助开发者更有效地管理 UI 相关的数据,并且能够在配置变更(如屏幕旋转)时保存和恢复 UI 数据。
对于Android传统的代码编写方式,一般地,将页面UI的处理,数据的加载,全部放在Activity或Fragment中进行,但这并不满足“单一功能原则”,也不易于维护和扩展。我们应该将项目结构进行分层,传统的MVC,MVP和MVVM,都是将项目结构分了三层,“各管一摊”,这三种模式各有特点、各有利弊,但它们都有一个共同点,就是区分出了M层与V层,M即Model层,V即View层,M层负责数据的处理,View层负责UI的展示,不同的地方在于如何将M层与V层进行结合。
在Android开发中,数据与界面的分离一直是一项重要的挑战。为了解决这个问题,Google推出了Android Jetpack组件之一的ViewModel。ViewModel是一种用于管理UI相关数据的架构组件,它能够帮助开发者实现优雅的数据驱动和生命周期管理。本文将深入浅出地介绍ViewModel的使用和原理,带你一步步掌握这个强大的组件。
ViewModel和LiveData最早是Google提出的AAC架构中的重要成员,那么它为什么又和协程扯上关系了呢?
对于支持横竖屏切换的应用程序,我们切换横竖屏时,Activity会被重新创建,我们需要考虑数据的存储和恢复。Jetpack为我们提供了ViewModel组件帮我们解决这个问题,ViewModel以注重生命周期的方式存储和管理界面相关的数据。ViewModel独立于配置变化,就算Activity重建,也不会影响ViewModel的生命周期。
原文地址:ViewModels and LiveData: Patterns + AntiPatterns 原文作者:Jose Alcérreca 译文出自:掘金翻译计划 本文永久链接:github.
这个系列我做了协程和Flow开发者的一系列文章的翻译,旨在了解当前协程、Flow、LiveData这样设计的原因,从设计者的角度,发现他们的问题,以及如何解决这些问题,pls enjoy it。
onCleared方法是ViewModel独有的,当Activity真正退出后,它会调用,而不是销毁后调用,因为旋转屏幕也会调用onDestroy。所以我们可以在这取消网络请求等。平常开发中不做任何操作时,如果有网络请求中,Activity被销毁,那么极有可能请求成功返回结果到activity中造成泄漏等不必要的麻烦。
ViewModel 甫一发布,便成为了 Jetpack 中的核心组件之一。我们在 2019 年做的一份开发者问卷显示,超过 40% 的 Android 开发者已经在自己的应用中使用了 ViewModel。ViewModel 可以将数据层与 UI 分离,而这种架构不仅可以简化 UI 的生命周期的控制,也能让代码获得更好的可测试性。
ViewModel 甫一发布,便成为了 Jetpack 中的核心组件之一。我们在 2019 年做的一份开发者问卷显示,超过 40% 的 Android 开发者已经在自己的应用中使用了 ViewModel。ViewModel 可以将数据层与 UI 分离,而这种架构不仅可以简化 UI 的生命周期的控制,也能让代码获得更好的可测试性。如果想了解更多,可以参考 ViewModel: 简单介绍视频和官方文档。
在Android开发中,数据的管理是一个至关重要的问题。随着应用复杂度的增加,我们需要一种能够有效管理数据和处理UI相关逻辑的机制。Android架构组件中的ViewModel应运而生。本文将深入探讨ViewModel的原理,并介绍其高级运用,旨在帮助开发者更好地理解和运用这一组件。
本次推出 Android Architecture Components 系列文章,目前写好了四篇,主要是关于 lifecycle,livedata 的使用和源码分析,其余的 Navigation, Paging library,Room,WorkMannager 等春节结束之后会更新,
📷 朋友们好,今天我向大家介绍下 ViewModel 中如何使用 ViewModelProvider.Factory. ---- 现在开始 所以,我们首要问题是:什么是 ViewModelPro
之前我们说过一期ViewModel,但是有读者反映还是有些面试题不会回答,今天就节选一些再来看看 :
Hilt 是 Jetpack 推荐使用的 Android 应用 依赖项注入 (DI) 解决方案,现已 稳定。这意味着 Hilt 已经完全可以在 生产环境 中使用。Hilt 相比 Dagger 更加便捷,同时也能帮您减少模板代码,它专为 Android 而生,并集成了多个 Jetpack 依赖库。很多公司已在他们的应用中使用了 Hilt 并从中获益。
在 Activity 中 , 存在两种元素 , 视图 View 和 填充视图数据用的 数据模型 Model ;
本章主要学习使用ViewModel保存UI数据,修复GeoQuiz应用的UI状态丢失缺陷。
原文地址:ViewModels : A Simple Example 原文作者:Lyla Fujiwara 译文出自:掘金翻译计划 本文永久链接:https://github.com/xitu/gold-miner/blob/master/TODO/viewmodels-a-simple-example.md 译者:huanglizhuo 校对者:chuanxing miguoer 简介 两年前,我在做 给 Android 入门的课程,教零基础学生开发 Android App。其中有一部分是教学生构建一个简
ViewModel 是 Jetpack 组件中较常用的组件之一,也是实现 MVVM 模式或 MVI 模式的标准组件之一。在这篇文章里,我将与你讨论 ViewModel 实用和面试常见的知识点。如果能帮上忙请务必点赞加关注,这对我非常重要。
上一篇介绍了Jetpack AAC 的数据处理组件 LiveData,它是使得 数据的更新 能以观察者模式 被observer感知,且此感知只发生在活跃生命周期状态。这篇来介绍与LiveData搭配使用的视图模型组件——ViewModel。
任何有经验的.NET开发人员都知道,即使.NET应用程序具有垃圾回收器,内存泄漏始终会发生。并不是说垃圾回收器有bug,而是我们有多种方法可以(轻松地)导致托管语言的内存泄漏。
LeakCanary内部用到了Refercence及ReferenceQueue来实现对对象是否被回收的监听。这是LeakCanary的核心逻辑,因此在讲解LeakCanary之前,我们先来简单了解一下Refercence及ReferenceQueue。
我的博客即将同步至 OSCHINA 社区,这是我的 OSCHINA ID:xiangzhihong,邀请大家一同入驻:https://www.oschina.net/sharing-plan/apply
这里特别注意 , 在协程中调用 挂起 suspend 函数 , 必须在 Dispatchers.Main 调度器中执行 ;
在Android开发中,LiveData是一个非常有用的工具。它可以帮助我们在应用程序中实现响应式编程,并且还具有生命周期感知能力,可以帮助我们避免内存泄漏。本文将探讨LiveData的高阶使用和原理,并提供一些常见错误的解决方法。此外,我们还将介绍一些更高级的使用场景,以帮助你更好地使用LiveData。
保持基本的手部和呼吸道卫生,坚持安全饮食习惯,并尽可能避免与任何表现出有呼吸道疾病症状(如咳嗽和打喷嚏等)的人密切接触。
本文是介绍 Android 协程系列中的第二部分,这篇文章主要会介绍如何使用协程来处理任务,并且能在任务开始执行后保持对它的追踪。
本文介绍了我们在开发 2019 Android 开发者峰会 (ADS) 应用时总结整理的 Flow 最佳实践 (应用源码已开源),我们将和大家共同探讨应用中的每个层级将如何处理数据流。
使用协程,相信很多同学已经信手拈来了,但是关于ViewModelScope,可能很多同学在用,但却不知道原理,今天来一探究竟。
在页面(Activity/Fragment)功能较为简单的情况下,通常会把UI交互,与数据获取等相关的业务逻辑全部写在页面中。但是在页面功能复杂的情况下,这样做是不合适的,因为它不符合“单一功能原则”。页面应该只负责处理用户和UI控件的交互,并将数据展示在屏幕上。与数据相关的业务逻辑应该单独处理和存放。为了更好地将职能划分清楚,Android为我们提供了ViewModel类,专门用于存放应用程序页面所需要的数据。
LiveData是Jetpack架构组件Lifecycle 库的一部分,是一个可感知生命周期的可观察容器类 (Observable)。与常规的可观察类不同,LiveData 具有生命周期感知能力,这意味着它具有感知应用组件(如 Activity、Fragment 或 Service)的生命周期的能力,并且LiveData仅更新处于活跃生命周期状态的应用组件观察者。
在上一节中,我们学习了ViewModel,了解到ViewModel的主要作用是存放页面所需要的各种数据。我们在示例代码中定义了接口,当数据发生变化的时候,采用接口的方式实现对页面的通知。但是这种方式是有缺陷的,当要存储的数据非常多的时候,就要定义大量的接口,代码会显得十分冗余,为此JetPack提供了LiveData组件。LiveData是一个可被观察的数据容器类,具体来说,可以将LiveData理解为一个数据的容器,它将数据包装起来,使数据成为被观察者,当数据发生变化的时候,观察者能够获得通知。我们不需要自己去实现观察者模式,LiveData内部已经默认实现好了。
LeakCanary是Android面试中备受瞩目的一环,各大厂商如腾讯Matrix和快手Koom都自研内存泄漏检测框架,其原理分析也常被引述于帮助文档中。本文旨在抛却浮躁情绪,深入探究该框架的思想。
LiveData 具有生命周期感知能力,观察时会传入对应的LifecycleOwner。这种感知能力可确保LiveData 仅更新处于活跃生命周期状态的应用组件观察者。
Jetpack 架构组件 及 标准化开发模式 的确立,意味着 Android 开发已步入成熟阶段。现在的Android岗招人的时候也非常看重应试者对 Jetpack 架构组件的理解程度。
ViewModel类是被设计用来以可感知生命周期的方式存储和管理 UI 相关数据,ViewModel中数据会一直存活即使 activity configuration发生变化。
应用中的状态指的是可以随时间变化的任何值。这个定义非常广泛,例如从数据库到类的变量,页面上显示的提示信息等。
1.需要先创建ViewModel类,继承自ViewModel重写onclear方法,使得页面销毁的时候能够走到自定义的onClear方法中
AndroidX Lifecycle v2.1.0 在 ViewModel 中引入 viewModelScope,当 ViewModel 被销毁时它会自动取消协程任务,这个特性真的好用。本文介绍 viewModelScope 使用和内部实现方式,分析 ViewModel 是如何自动取消协程的。
网上关于 MVVM 的介绍非常多,这里不再赘述,直接看一个例子,用直观的代码来感受一下用 MVVM 开发,是一种什么样的感受
作者简介 Qifan,携程高级工程师,专注移动端开发;Yinuo,携程高级工程师,专注移动端开发;popeye,携程软件技术专家,关注移动端跨端技术,致力于快速,高性能地支撑业务开发。 一 、前言 携程酒店业务使用Flutter技术开发的时间快接近两年,这期间有列表页、详情页、相册页等页面使用了Flutter技术栈进行了跨平台整合,大大提高了研发效率。在开发过程中,也遇到了一些性能相关问题和用户反馈,比如长列表滚动卡顿、页面打开时间较长、页面打开后部分数据加载时间较长等问题。为解决这些问题,我们选用了多
内存泄漏原理 : 长生命周期对象 , 持有短生命周期对象的引用 , 并且是强引用持有 , GC 无法释放该短生命周期对象引用 , 造成 OOM ;
2. 类加载阶段,.class文件由类加载器加载进JVM。类加载器通常采用双亲委派模型,首先请求父类加载器加载,如果父类加载器无法加载则自己加载。
Android Jetpack 是 Google 推出的一套强大且灵活的库集合,旨在帮助 Android 开发者构建高质量、稳定且易于维护的应用程序。其中最重要的组件之一是 Lifecycle,它提供了一种便捷的方式来管理 Android 应用程序组件的生命周期,使得开发者能够更加专注于应用逻辑的实现而不用过多关心生命周期管理。本篇文章将深入浅出地介绍 Android Jetpack Lifecycle 的使用原理,带你一步步走进它的核心机制,同时展示一些高级的使用方式,助你在 Android 开发的路上更进一步。
在Android开发领域,掌握Jetpack是一位专业Android开发者必备的技能。本文将围绕Android Jetpack展开,深度解析面试中可能涉及到的高级疑难问题,我将分享一些关于Android Jetpack的面试技巧,帮助你更好地准备面试。
俗话说,无规矩不成方圆,对于项目也是这样,必须有统一的架构体系才能让项目更加稳健,开放,和快速。今天就来谈谈吧:
将对象 A 的作用域限定到对象 B,指的是对象 B 的整个生命周期内始终持有相同的 A 实例。当涉及到 DI (依赖项注入) 时,限定对象 A 的作用域为一个容器,则意味着该容器在销毁之前始终提供相同的 A 实例。
在现代Android应用开发中,协程(Coroutine)已经成为一种不可或缺的技术。它不仅简化了异步编程,还提供了许多强大的工具和功能,可以在高阶场景中发挥出色的表现。本文将深入探讨Coroutine重要知识点,帮助开发者更好地利用Coroutine来构建高效的Android应用。
MVC优缺点 【缺点】MVC的耦合性还是相对较高, View可以直接访问Model,导致3者之间构成回路。 因此, 【MVP与MVC的主要区别】是, MVP中的View不能直接访问Model, 需要通过Presenter发出请求,View与Model不直接通信。 另外, 耦合性高的MVC,相对于MVP、MVVM, 可读性、健壮性、可拓展性都大打折扣,也不便于测试; 【MVC缺点的对立面,就是MVP、MVVM的优点】 【优点】简单粗暴,适合简单项目 MVP优缺点 【缺点】对于简单的应用来说
领取专属 10元无门槛券
手把手带您无忧上云