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

使用 Architecture Component 实现 MVVM 的正确姿势

这里使用 LiveData 和 ViewModel 实现了一个简单的 MVVM:数据的变化能够自动通知 View 然后做出相应的 UI 改变,并且能在 Activity 生命周期结束前停止监听 二、认识...获取 ViewModel 时,必须在 Activity onCreate 之后或者 Fragment onAttach 之后再使用,否则会报 IllegalStateException /**...: // 懒加载,只有在使用的时候才初始化,但是还是要保证在 Activity.onCreate() 或者 // Fragment.onAttach() 之后再使用 private val viewModel...非粘性消息的探索和尝试 LiveData 变换和组合 有时候我们希望对 LiveData 做一些变换或者其他处理再提供给 View 层使用,可以使用 Transforms 一对一的静态转换 —— map...的正确使用姿势以及反模式 LiveData 非粘性消息的探索和尝试 自定义生命周期以及实现生命周期感知能力

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

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

    适用于简单到中等复杂度的应用,特别是当 UI 更新不频繁时。 综上所述,MVVM模式通过清晰的关注点分离、高可测试性和数据绑定等特性,为Android开发提供了一种现代且高效的解决方案。...在ViewModel中暴露LiveData或Flow等可观察的数据流,以便在数据加载完成时通知UI更新。...数据同步的注意事项 确保数据一致性:在多个组件或页面共享数据时,要确保数据的一致性和实时性。 避免内存泄漏:合理使用LiveData、协程等机制来避免内存泄漏和无效更新。...由于商品数据量大,如果一次性加载和渲染所有数据,会导致应用卡顿甚至崩溃。为了解决这个问题,我们采用了分页加载的策略,即每次只加载和渲染部分数据,当用户滚动到页面底部时,再加载下一批数据。...然而,过度使用这些可观察数据类可能导致内存泄漏和性能问题。因此,建议仅在必要时使用LiveData或StateFlow,并确保在适当的时候取消观察以避免内存泄漏。

    13210

    Kotlin 和 JetPack 的项目实战(一)

    jetpack官方介绍 为了完成 MVVM 的设计,挑选了其中的 LiveData 和 ViewModel 进行使用。...LiveData 其实跟 RxJava 一样属于观察者模式的第三方库,一定程度上来说是重复的,奈何各有优势,所以在数据处理中继续使用 Retrofit 和 RxJava 这套搭配,而在 UI 操作上添加了...当 UI 处于started 或 resumed 状态外,但是还没销毁之前,一直会接收更新数据,在 UI 处于可见状态时,只会通知最新的数据到 UI。 4....和 LiveData 2个库来完成 那先从 ViewModel 说起 abstract class BaseViewModel : ViewModel() { /** 显示布局里的数据加载view...showLoadingView: LiveData get() = _showLoadingView /** 调用set方法即可决定是否显示布局里的数据加载view

    1K10

    “终于懂了“系列:Jetpack AAC完整解析(四)MVVM - Android架构探索!

    View,视图,即Activity/Fragment ViewModel,视图模型,负责业务逻辑。 注意,MVVM这里的ViewModel就是一个名称,可以理解为MVP中的Presenter。...不仅通过数据驱动完成彻底解耦,还兼顾了 Android 页面开发中其他不可预期的错误,例如Lifecycle 能在妥善处理 页面生命周期 避免view空指针问题,ViewModel使得UI发生重建时 无需重新向后台请求数据...现在,更新数据时,系统会通知 UserListActivity。此外,由于此 LiveData 字段具有生命周期感知能力,因此当不再需要引用时,会自动清理它们。...实现 ViewModel 的第一个想法可能是 使用Retrofit/Okhttp调用接口 来获取数据,然后将该数据设置给 LiveData 对象。...例如例子中的加载进度条,就是观察 ViewModel中的MutableLiveDataloadingLiveData 进行操作的。

    2.1K20

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

    的使用 使用 Coil 加载图片 使用 ViewModel、LiveData、DataBinding 协同工作 使用 Motionlayout 做动画 App Startup 与 Hilt 的使用 增加...LiveData,以至于在很多开源的 MVVM 项目中也是直接使用 LiveData,但是在 Repositories 或者 DataSource 中直接使用 LiveData 这种做法对吗?...项目也在逐渐切换到 Flow,为什么 Google 会推荐使用它呢,使用 Flow 能带来那些好处呢,为我们解决了什么问题 Kotlin Flow 是什么?...那么 Flow 为我们解决了什么问题,我主要从以下几个方面思考: LiveData 是一个生命周期感知组件,最好在 View 和 ViewModel 层中使用它,如果在 Repositories 或者...如何处理 ViewModel 的三种方式 如果不使用数据绑定,在 Activity 或者 Fragment 中如何处理 ViewModel 的三种方式。

    4.4K21

    LiveData 的正确使用姿势以及反模式

    借助 LiveData 的能力,在 View(Activity 或者 Fragment)和 ViewModel 之间,使用 LiveData 通信,当 LiveData 发生变化的时候,订阅了该 LiveData...因此,并不是所有场景下都适合使用 LiveData,当我们所要监听的数据是符合「状态」特性,而是不是「事件」特性的时候,才是最适合使用 LiveData 的场景。...下面分别介绍几种常见错误使用方式: case 1:数据是「事件」类型的 以「收款到账提醒举例」 class MvvmViewModel : ViewModel() { private val...LiveData 的,虽然使用各种 workaround 的方式(此处可参考我的另一篇文章:LiveData 非粘性消息的探索和尝试 )可能可以满足需求,但是 LiveData 有自己特定的使用场景,...使用 LifecycleRegistry 给 ViewHolder 分发生命周期,详见我的另一篇文章: 自定义生命周期以及实现生命周期感知能力 ---- 相关文章 LiveData 非粘性消息的探索和尝试

    1.2K20

    开发以太坊安卓钱包系列3 - 资产信息展示

    后来Google 推荐多个架构模式: MPV、 MVVM模式来解决数据和UI耦合的问题,登链钱包代码[1],使用的就是MVVM模式,所以对它做一个简单介绍,下面是MVVM的视图和数据的交互图: ?...使用MVVM模式最大的优点就是解耦, 因为数据处理逻辑是独立于View, 在UI更改时,ViewModel 不用做太多改动。...我们使用了Google在I/O大会推出的一套遵循MVVM开发模式的LiveData和ViewModel组件架构。...ViewModel 和 LiveData ViewModel 会关注UI生命周期来存储和管理数据,在Activity发生变化(锁屏开屏、旋转)时,ViewModel 会自动保留之前的数据并给新的Activity...或Fragment使用,当界面被系统销毁时,ViewModel也会进行资源清理,避免内存泄漏。

    1.3K30

    MVI 架构

    要了解MVI架构,我们首先来了解下MVVM架构有什么不足,相信使用MVVM架构的同学都有如下经验,为了保证数据流的单向流动,LiveData向外暴露时需要转化成immutable的,这需要添加不少模板代码并且容易遗忘...,如下所示: class TestViewModel : ViewModel() { //为保证对外暴露的LiveData不可变,增加一个状态就要添加两个LiveData变量 private val...这其实就是我通过MVVM架构写比较复杂页面时最难受的点。其次就是View层通过调用ViewModel层的方法来交互的,View层与ViewModel的交互比较分散,不成体系。...小结一下,在我的使用中,MVVM架构主要有以下不足: 为保证对外暴露的LiveData是不可变的,需要添加不少模板代码并且容易遗忘 View层与ViewModel层的交互比较分散零乱,不成体系 MVI...,其实并没有使用MVVM双向绑定的特性,而是单一数据源 当页面复杂时,需要定义很多State,并且需要定义可变与不可变两种,状态会以双倍的速度膨胀,模板代码较多且容易遗忘 View与ViewModel

    5410

    ViewModels and LiveData- Patterns + AntiPatterns

    ViewModel在配置变化时被持久化,所以当重新请求发生时,不需要重新查询外部数据源(如数据库或网络)。 当长期运行的操作结束时,ViewModel中的观察变量会被更新。数据是否被观察并不重要。...当试图更新不存在的视图时,不会发生空指针异常。 ViewModels不引用视图,所以内存泄漏的风险较小。...视图如何区分正在加载的数据、网络错误和一个空列表? 你可以从ViewModel中暴露出一个LiveData。例如,MyDataState可以包含关于数据是否正在加载、是否已经成功加载或失败的信息。...你也可以使用onActive()来启动一些加载数据的服务,但除非你有很好的理由,否则你不需要等待LiveData的观察。...让你的Activity或Fragment告诉ViewModel何时开始加载数据。

    1.1K30

    MVVM 进阶版:MVI 架构了解一下~

    要了解MVI架构,我们首先来了解下MVVM架构有什么不足 相信使用MVVM架构的同学都有如下经验,为了保证数据流的单向流动,LiveData向外暴露时需要转化成immutable的,这需要添加不少模板代码并且容易遗忘...,如下所示 class TestViewModel : ViewModel() { //为保证对外暴露的LiveData不可变,增加一个状态就要添加两个LiveData变量 private...其次就是View层通过调用ViewModel层的方法来交互的,View层与ViewModel的交互比较分散,不成体系 小结一下,在我的使用中,MVVM架构主要有以下不足 为保证对外暴露的LiveData...,MVP,MVVM与MVI架构,目前MVVM是官方推荐的架构,但仍然有以下几个痛点 MVVM与MVP的主要区别在于双向数据绑定,但由于很多人(比如我)并不喜欢使用DataBindg,其实并没有使用MVVM...双向绑定的特性,而是单一数据源 当页面复杂时,需要定义很多State,并且需要定义可变与不可变两种,状态会以双倍的速度膨胀,模板代码较多且容易遗忘 View与ViewModel通过ViewModel暴露的方法交互

    2.1K20

    引入Jetpack架构后,你的App会发生哪些变化?

    答案显而易见,无非是想让数据使用者感知到而已,而LiveData可以优雅的实现这一流程,将 改变、通知 两步操作合并为一步 即省事也提高了安全性....重新渲染 liveData.value = "android" 看起来平平无奇甚至理所当然,但它确实解决了我们前端开发的痛点,在此之前数据和UI都需要我们开发者单独修改,当面对十几个View时很难做到不漏不忘...ViewModel与LiveData真乃天作之合 Jetpack ViewModel 并不等价于 MVVM ViewModel 经常有小伙伴将Jetpack ViewModel 和 MVVM ViewModel...ViewModel官方定义是一个带作用域的状态托管框架,为了将其状态托管发挥到极致,Google甚至单独为ViewModel开了个后门,Activity横竖屏切换时不会销毁对应的ViewModel,为的就是横竖屏能共用同一个...分层固然重要,但MVVM最核心点是通过ViewModel做数据驱动UI以及双向绑定的操作用来解决数据/UI的一致性问题。

    1K31

    引入Jetpack架构后,你的App会发生哪些变化?

    答案显而易见,无非是想让数据使用者感知到而已,而LiveData可以优雅的实现这一流程,将 改变、通知 两步操作合并为一步 即省事也提高了安全性....ViewModel与LiveData真乃天作之合 3.1 Jetpack ViewModel 并不等价于 MVVM ViewModel 经常有小伙伴将Jetpack ViewModel 和 MVVM ViewModel...ViewModel官方定义是一个带作用域的状态托管框架,可通过指定作用域和Activity/Fragment共存亡,为了将其状态托管发挥到极致,Google甚至单独为ViewModel开了个后门,Activity...横竖屏切换时不会销毁对应的ViewModel,为的就是横竖屏能共用同一个ViewModel,从而保证数据的一致性。...分层固然重要,但MVVM最核心点是通过ViewModel做数据驱动UI以及双向绑定的操作用来解决数据/UI的一致性问题。

    84300

    “终于懂了“系列:Jetpack AAC完整解析(三)ViewModel 完全掌握!

    这篇来介绍与LiveData搭配使用的视图模型组件——ViewModel。 注意,如果你对MVVM架构中的VM和本篇的ViewModel都没有一定认识的话,那么就不要将两者进行联想了。...目前,你就理解为没有任何关系。后面会有专门篇幅介绍MVVM。 一、ViewModel介绍 ViewModel是Jetpack AAC的重要组件,同时也有一个同名抽象类。...ViewModel,意为 视图模型,即 为界面准备数据的模型。简单理解就是,ViewModel为UI层提供数据。官方文档定义如下: ViewModel 以注重生命周期的方式存储和管理界面相关的数据。...五、总结 本文先介绍了ViewModel的概念——为界面准备数据的模型,然后它的特点:因配置更改界面销毁重建后依然存在、不持有UI应用;接着介绍了 使用方式、Fragment数据共享。...下一篇将介绍基于LifeCycle、LiveData、ViewModel的MVVM架构,终于要到MVVM了,敬请关注。 今天就到这里啦~ 感谢与参考:

    1.8K10

    Android技术栈(四)Android Jetpack MVVM 完全实践

    image.png 1 MVVM总览 本文包含Android中MVVM体系中的很多部分,主要对ViewModel+DataBinding+RxJava+LiveData+Lifecycle等笔者所使用的技术体系进行解析...MVVM的核心思想是观察者模式,它通过事件和转移View层数据持有权来实现View层与ViewModel层的解耦....但是MVVM也有自己的缺点,那就是使用MVVM的情况下ViewModel与View层的通信变得更加困难了,所以在一些极其简单的页面中请酌情使用,否则就会有一种脱裤子放屁的感觉,在使用MVP这个道理也依然适用...,并且布局也正常加载了,这是为什么呢这是因为在打包时,Gradle通过APT把你的DataBinding风格的xml全部翻译了一遍,让LayoutInfalter能读懂他们,正是因为这个兼容的实现,而使得我们可以在使用和不使用...4 LiveData LiveData是对Android组件生命周期感知的粘性事件,也就是说,在LiveData持有数据时,你去订阅它就能收到他最后一次接收到的数据.在实战中,我们能用到的LiveData

    3.9K01

    引入Jetpack架构后,你的App会发生哪些变化?

    答案显而易见,无非是想让数据使用者感知到而已,而LiveData可以优雅的实现这一流程,将 改变、通知 两步操作合并为一步 即省事也提高了安全性....ViewModel与LiveData真乃天作之合 3.1 Jetpack ViewModel 并不等价于 MVVM ViewModel 经常有小伙伴将Jetpack ViewModel 和 MVVM ViewModel...ViewModel官方定义是一个带作用域的状态托管框架,可通过指定作用域和Activity/Fragment共存亡,为了将其状态托管发挥到极致,Google甚至单独为ViewModel开了个后门,Activity...横竖屏切换时不会销毁对应的ViewModel,为的就是横竖屏能共用同一个ViewModel,从而保证数据的一致性。...分层固然重要,但MVVM最核心点是通过ViewModel做数据驱动UI以及双向绑定的操作用来解决数据/UI的一致性问题。

    1.9K80

    细说Jetpack中那些LiveData们

    block中的代码会在LiveData标为活跃状态后只执行,且正常情况下只会执行一次。LiveData的非活跃到活跃状态的切换发生在注册在其身上的活跃的observer从0变为1时。...maybeRun() //注释5 活跃时尝试执行代码块,如果blockRunner为空就不会执行 } } internal class BlockRunner(..) { private...当LiveData再次处于活跃状态时也不会执行了。 一旦任务被取消成功注释8处,runningJob会被置空,注释5处 当LiveData重新处于活跃状态时block代码块就会被重新执行。...private String mKey; private SavedStateHandle mHandle; 作用是保证,LiveData所在的Viewmodel重建时,能够拿到销毁前的数据。...CoroutinLiveData出场自带所宿主的ViewModel MediatorLiveData能同时监听多个LiveData的数据变化。

    65120

    7. JetpackNote---基于Jetpack的学习笔记APP

    :Navigation、Lifecycles、Paging、LiveData、ViewModel等… \n项目使用Kotlin语言进行编写,依赖库截止代码编写时为最新版本,的几篇源码分析我们分别对Navigation...Jetpack源码解析—LiveData的使用及工作原理 5. Jetpack源码解析—ViewModel基本使用及源码解析 6. Jetpack—Paging你知道怎样上拉加载吗?...等…项目使用Kotlin语言进行编写,依赖库截止代码编写时为最新版本。...想尝试一种新的架构方式,从我开始工作到现在,经历过了最初的MVC、MVP[MVP-todo、The-MVP…]以及各式各样的MVP]、MVVM、Clean等,当然我并没有所有的架构都用到过,每个项目基于自己的项目特点以及需求的迭代都会出现一套基于开发者所设计的架构模式...4.4 ViewModel 在ViewModel模块,屏幕中央为一个计时器,通过使用ViewModel存储计时器的值,将屏幕方向发生改变后,数据仍然存在不会销毁。

    1K30
    领券