首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android MVVM框架搭建(一)ViewModel + LiveData + DataBinding

ViewModel:关联层,将Model和View进行绑定,只做和业务逻辑相关的工作,不涉及任何和UI相关的操作,不持有控件引用,不更新UI。...ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。DataBinding数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。...二、ViewModel使用   ViewModel的优势在于生命周期和数据持久化,那么它就适用于Activity和Fragment,其次就是异步回调,不会造成内存泄漏,再次就是对View层和Model层进行隔离...因为这个结果是对的,那就是数据持久化,因为我们知道手机在切换屏幕的时候Activity是会重新创建的,因此如果我们的数据是放在Activity中,那么切换屏幕之后就会重置,输入框也不会有值,但是通过ViewModel...去保存输入框的值就不同了,虽然你的Activity在切换屏幕的时候销毁并且重新创建了,但是我的MainModel依然稳定,所以我才能在横屏的时候也登陆,这样不会造成数据丢失。

17K97

Android MVVM框架搭建(一)ViewModel + LiveData + DataBinding

ViewModel:关联层,将Model和View进行绑定,只做和业务逻辑相关的工作,不涉及任何和UI相关的操作,不持有控件引用,不更新UI。...ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。DataBinding数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。...二、ViewModel使用   ViewModel的优势在于生命周期和数据持久化,那么它就适用于Activity和Fragment,其次就是异步回调,不会造成内存泄漏,再次就是对View层和Model层进行隔离...因为这个结果是对的,那就是数据持久化,因为我们知道手机在切换屏幕的时候Activity是会重新创建的,因此如果我们的数据是放在Activity中,那么切换屏幕之后就会重置,输入框也不会有值,但是通过ViewModel...去保存输入框的值就不同了,虽然你的Activity在切换屏幕的时候销毁并且重新创建了,但是我的MainModel依然稳定,所以我才能在横屏的时候也登陆,这样不会造成数据丢失。

2.7K32
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Jetpack】LiveData 架构组件 ( LiveData 简介 | LiveData 使用方法 | ViewModel + LiveData 示例 )

    一、LiveData 简介 ---- 在 视图 View 与 数据模型 Model 通过 ViewModel 架构组件 进行绑定后 , 可以立即 将 ViewModel 中的数据设置到 UI 界面中...通知 UI 来进行 视图 View 的更新 操作呢 ?...} }) 三、ViewModel + LiveData 简单示例 ---- 设置一个定时器 , 定时更新数据 , 在 ViewModel 中数据发生了改变 , 需要 主动通知 视图 View 进行修改...数据进行累加 , LiveData 设置了 Observer 监听 , 数据改变时回调 Observer#onChanged 函数更新 UI 显示 ; 执行时切换屏幕方向 , 不影响数据累加显示 ;...; 在 SeekBar 的拖动数据中 , 修改 ViewModel 中的 LiveData 数据 , 当数据修改时 , 对应的 Fragment2 中的 TextView 会刷新显示新的数据 ; package

    1.3K20

    Android Jetpack - Lifecycles

    他们不应该试图获取自己的数据;相反,使用 ViewModel 执行此操作,并观察 LiveData 对象以将更改反映回 UI 尝试编写数据驱动的 UI,其中 UI 控制器负责在数据更改时更新视图,或将用户操作通知给...相反,ViewModel 应调用适当的组件来获取数据,然后将结果提供回 UI 控制器 使用数据绑定来维护视图和 UI 控制器之间的干净界面。...这使您可以使视图更具说明性,并最大限度地减少在活动和片段中编写所需的更新代码。...用例 在高精度和低精度的定位模式之间切换,使用生命周期感知组件可以让你的 App 在可见状态下使用高精度定位,当 App 处于后台的情况下切换到低精度定位,LiveData 是一个生命周期感知组件,允许你的应用在用户更改位置时自动更新...使用生命周期感知组件在应用程序处于前台时启用网络数据的实时更新(流式传输),并在应用程序进入后台时自动暂停 暂停和恢复动画 drawables 。

    1.4K30

    Android应用架构的未来:深入理解MVI模式及其优势

    在MVI中,模型是不可变的数据结构,它包含了应用程序的所有状态信息。当视图接收到新的状态时,它会重新渲染以反映最新的状态。这种不可变性使得状态管理更加简单和可靠,因为状态不会被意外地修改或篡改。...在MVI中,意图是一种不可变的数据结构,它描述了用户的行为。当视图接收到意图时,它会将意图发送给处理程序来更新模型的状态。...使用单向数据流来管理状态更新,避免出现状态混乱和不一致的情况。 将副作用(例如网络请求、数据库操作)与视图逻辑分离,以便更好地进行测试和维护。...MVVM 特点: 双向数据绑定:MVVM通过双向数据绑定实现了View和ViewModel之间的自动同步,减少了手动更新UI的代码量。...适用场景: 传统项目:适用于传统的Android项目,开发者更熟悉这种模式,易于上手和使用。 需要测试的项目:适用于需要进行大量测试的项目,Presenter可以方便地进行单元测试。

    1.1K10

    正确认识 MVCMVPMVVM

    数据绑定 MVVM 最重要的一个特性就是数据绑定,通过将 View 的属性绑定到 ViewModel,可以使两者之间松耦合,也完全不需要在 ViewModel 里写代码去直接更新一个 View。...数据绑定系统还支持输入验证,这提供了将验证错误传输到 View 的标准化方法。 通过数据绑定,当 ViewModel 的数据发生改变之后,与之绑定的 View 也会随之自动更新。...这就涉及到数据绑定的两种类型: 单向绑定:ViewModel 与 View 绑定之后,ViewModel 变化后,View 会自动更新,但反之不然,即数据传递的方向是单向的。...(ViewModel —> View) 双向绑定:ViewModel 与 View 绑定之后,如果 View 和 ViewModel 中的任何一方变化后,另一方都会自动更新,这就是双向绑定。...最后,LoginViewModel 与 View 界面进行了绑定的除了 userName、password、uid 这三个属性之外,其实还有一个命令绑定,就是 login() 方法,其绑定了按钮的点击事件

    2.8K33

    MVVM 架构模式:解耦、可测试与高效

    在 MVVM 中,数据绑定是一个核心机制,它可以让 View 与 ViewModel 同步更新,而无需手动编写繁琐的代码。...维护性与扩展性:View 与 Model 分离之后,任何一方的变化都不会影响到另一方,这大大提高了代码的维护性与扩展性。 MVVM 实现的核心概念 数据绑定 数据绑定是 MVVM 的核心机制。..., updateMessage(newMessage) { this.message = newMessage; } }; 假设 ViewModel 上有一个按钮,点击后更新 message...单向绑定 vs 双向绑定 在某些场景下,我们只希望 View 显示数据,而不希望 View 更新 ViewModel 的数据,这时候我们可以使用 单向绑定。...像 Vue.js、Angular 和 Knockout.js 这样的框架都使用了 MVVM 模式,它们提供了强大的数据绑定机制,使开发者可以专注于业务逻辑而不需要手动管理 DOM 更新。

    56310

    MVVM+数据绑定,让你的Android应用飞起来,MVVM+数据绑定技巧,打造Android应用的数据流水线!

    这种分离使得视图和模型的更新可以独立进行,从而降低了代码的耦合度,提高了系统的灵活性。此外,数据绑定技术的运用进一步简化了视图与视图模型之间的交互,使得数据更新更加高效、实时。...MVVM模式中的ViewModel层更加抽象和通用,它不依赖于具体的视图实现,而是通过数据绑定技术与视图层进行交互。...二、数据更新的优化策略 在MVVM模式下,当ViewModel中的数据发生变化时,需要通知View进行更新。这个过程如果处理不当,可能会导致性能问题。...这有助于减少内存泄漏和不必要的UI更新,因为当Activity或Fragment处于非活动状态时,它们不会自动接收更新。...同时,可以考虑使用双向数据绑定来减少手动更新视图的代码量,进一步提高性能。

    13210

    Android 多返回栈技术详解

    系统返回按钮的乐趣 无论您在使用 Android 全新的 手势导航 还是传统的导航栏,用户的 "返回" 操作是 Android 用户体验中关键的一环,把握好返回功能的设计可以使应用更加贴近整个生态系统。...这意味着当您使用 Fragments 或 Navigation 时,它们会通过 OnBackPressedDispatcher 来确保您调用了它们返回栈的 API,系统的返回按钮会将您推入返回栈的页面逐层返回...多返回栈不会改变这个基本逻辑。系统的返回按钮仍然是一个单向指令 —— "返回"。这对多返回栈 API 的实现机制有深远影响。...换言之,您会失去视图的状态,任何所保存的实例状态 (Saved Instance State),并且任何绑定到该 Fragment 的 ViewModel 实例都会被清除。...在 Fragment 的重构工作进行了 6 个月,进行了 35 次修改时,发现 Postponed Fragment 功能已经严重损坏,这一问题使得被推迟的事务处于一个中间状态 —— 既没有被提交也并不是未被提交

    96610

    【Jetpack】ViewModel 架构组件 ( 视图 View 和 数据模型 Model | ViewModel 作用 | ViewModel 生命周期 | 代码示例 | 使用注意事项 )

    文章目录 一、Activity 遇到的问题 二、视图 View 和 数据模型 Model 三、ViewModel 架构组件作用 四、ViewModel 代码示例 1、ViewModel 视图模型 2..., 提出了 ViewModel 架构组件 , 该组件 是 视图 View 和 数据模型 Model 之间 的 沟通桥梁 ; 借助 ViewModel , 视图 与 数据模型 实现了 解耦 , 同时 还能保证..., 数据 不由 View 直接进行管理 , 而是 由 ViewModel 进行管理 ; 当 Activity 屏幕旋转 , 销毁时 , 只会销毁 Activity 组件 , 不会将 ViewModel...(application)) .get(MyViewModel::class.java) 解绑 : 当 Activity 或者 Fragment 被销毁时 , 与之绑定的 ViewModel...---- ViewModel 使用注意事项 : 使用 ViewModel 时 , 不要将 Context 上下文对象传入 ViewModel 中 , 否则会导致内存泄漏 ; 如果要使用 Context

    86820

    三大架构的比较

    Controller执行业务逻辑并且操作Model,但不会直接操作View,可以说它是对View无知的。 model层更新完数据然后对视图进行更新,用户得到反馈。 2....MVVM 模型层(Model) 负责存储、检索、操纵来自数据库或者网络的数据 视图层(View) 用户界面,一般采用XML文件进行界面的描述 视图-模型层(ViewModel) 负责View和Model...MVVM代码实例 1.Model 2.ViewModel 3.接着使用databinding语法 对 xml 进行数据绑定,我们将 Click事件、输出结果都绑定到ViewModel上。...View可以独立于Model变化和修改,一个ViewModel可以绑定到不同的”View”上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。 2、可重用性。...ViewModel通过Data Binding实现了视图和数据的绑定,解决了这种MVP的缺陷。

    1.2K100

    Android Jetpack架构组件(三)之ViewModel

    简介 在早期的Android开发中,由于应用相对较小,页面相对简单,我们会将数据请求、页面UI处理和数据加载全部放在Activity或Fragment中进行,但是随着项目的迭代,这种开发方式显得越来越臃肿...Model层:数据层,主要负责数据实体和对数据实体的操作。 View层:视图层,对应Android的Activity、Fragment和View等,负责数据的显示以及与用户的交互。...ViewModel层:关联层,用于将Model和View进行绑定,当Model发生更改时,即时通知View进行刷新,当然,也可以反向通知。...在Android中,Activity/Fragment主要用于显示视图数据,如果它们也负责数据库或者网络加载数据等操作,那么势必造成代码臃肿,而将逻辑代码放到ViewModel之后,可以更有效的将视图数据相关逻辑和视图控制器分离开来...六、ViewModel是如何实现状态保留的 前面说过,ViewModel是不会随着Activity/Fragment的销毁而销毁的,因为ViewModel是将数据使用ViewModelStore 保存在

    1.4K00

    聊聊iOS开发之MVVM的架构设计

    ,delegate和target-action都可以用来做数据通信, 从而来实现绑定,但都不如ReactiveCocoa提供的RACSignal来的优雅, 使用函数响应式框架能更好的实现数据和视图的双向绑定...首先,ReactiveCocoa或RXSwift的学习成本很高; 其次, 数据绑定使得 Bug 很难被调试,当界面出现异常,可能是View的问题,也可能是数据ViewModel的问题。...1、视图控制器从 viewModel获取的数据将用来: 当validLogin的值发生变化时,触发登录按钮的enabled的属性。...进行自己所负责的视图数据绑定工作。...Controller则是最后的大家长,负责将ViewModel和ViewManger进行绑定, 进行数据转发工作。把合适的数据模型分发给合适的视图管理者。

    8.8K92

    Unity应用架构设计(1)—— MVVM 模式的设计和实施(Part 1)

    ViewModel 提供了 View 需要的数据,并且 ViewModel 实现 INotifyPropertyChanged 接口 ,当数据更改时,触发了 PropertyChanged 事件,由于控件也监听了此事件...值得注意的是,ViewModel 中的属性不是特殊的属性,它必须具备当数据更改时通知订阅者这个功能,怎么通知订阅者?当然是事件,故我把此属性称为 BindableProperty 属性。...之后,我们需要考虑: 怎样为 View 指定一个 ViewModel 当 ViewModel 属性值改变时,怎样订阅触发的 OnValueChanged 事件,从而达到 View 的数据更新 基于以上两点...在响应函数 OnBindingContextChanged 中 ,我们可以在此对 ViewModel 中事件进行监听,从而达到数据的更新。...的属性值改变事件进行监听,当触发时,将最新的数据同步到 UI 中。

    3.5K60

    Android应用架构-MVVM模式

    通过官方提供的Data Binding库,View层和ViewModel层中的数据可以实现绑定,ViewModel层中数据的变化可以自动通知View层进行更新,因此ViewModel层不需要持有View...ViewModel层不持有View层的引用,当View层发生改变时,只要View层绑定的数据不变,那么ViewModel层就不需要改变。...而在MVP模式下,当View层发生改变时,操作视图的接口就要进行相应的改变,那么Presenter层就需要修改了。 不用再编写很多样板代码。...通过官方提供的Data Binding库,当ViewModel中的数据发生变化时,UI将自动更新。...在xml布局文件中,通过官方提供的Data Binding库,将UI与ViewModel中的数据进行绑定,当ViewModel中的数据发生变化时,UI将自动更新。xml布局文件的代码如下所示: <?

    57310

    实战 | 使用 Kotlin Flow 构建数据流 管道

    Flow 是一种基于流的编程模型,本文我们将向大家介绍响应式编程以及其在 Android 开发中的实践,您将了解到如何将生命周期、旋转及切换到后台等状态绑定到 Flow 中,并且测试它们是否能按照预期执行...接下来,我们将介绍如何将数据加载到 Flow,然后经过转换后暴露给视图进行展示。 为了大家更方便地理解 Flow,我们以 Pancho (潘乔) 的故事来展开。...△ 铺设管道 在 Android 应用中您可以简单地在每次需要时请求数据,例如我们可以使用挂起函数来实现在每次视图启动时向 ViewModel 请求数据,而后 ViewModel 又向数据层请求数据,接下来这一切又在相反的方向上发生...在 Android 视图上收集数据流 在 Android 的视图中收集数据流要注意两点,第一是在后台运行时不应浪费资源,第二是配置变更。...当设置了超时时间后,如果按下主屏幕按钮会让视图立即结束收集,但 StateFlow 会经过我们设置的超时时间之后才会停止其上游数据流,如果用户再次打开应用则会自动重启上游数据流。

    1.5K10

    Google 推荐在 MVVM 架构中使用 Kotlin Flow

    flow { ... } 中执行,最后使用 emit() 方法更新数据,将数据发送给 ViewModel,代码如下所示: PokemonGo/app/src/main/java/com/hi/dhl/...Dispatchers.IO) 切换到 IO 线程,最后通过 emit() 方法将数据发送给 ViewModel,接下来我们来看一下如何在 ViewModel 中接受 Flow 发送的数据。...最后调用 LiveData 中的 emit() 方法更新 LiveData 的数据 DataBinding(数据绑定) 在 PokemonGo 项目中使用了 DataBinding 进行的数据绑定。...DataBinding(数据绑定)实际上是 XML 布局中的另一个视图结构层次,视图 (XML) 通过数据绑定层不断地与 ViewModel 交互,如下所示: PokemonGo/app/src/main...如何处理 ViewModel 的三种方式 如果不使用数据绑定,在 Activity 或者 Fragment 中如何处理 ViewModel 的三种方式。

    4.4K21
    领券