首页
学习
活动
专区
圈层
工具
发布

LiveData beyond the ViewModel

这篇博文将帮助你避免陷阱,并使用一些模式来帮助你使用LiveData构建一个更加「反应式」的架构。...img LiveData beyond the ViewModel 可观察范式在视图控制器和ViewModel之间工作得非常好,所以你可以用它来观察你的应用程序的其他组件,并利用生命周期意识的优势。...Patterns One-to-one static transformation — map img 在我们上面的例子中,ViewModel只是将数据从资源库转发到视图,将其转换为UI模型。...One-to-many dependency — MediatorLiveData MediatorLiveData允许你将一个或多个数据源添加到一个LiveData观察器中。...❞ Antipattern: Sharing instances of LiveData 当一个类将一个LiveData暴露给其他类时,请仔细考虑是否要暴露同一个LiveData实例或不同的实例。

2K30

Jetpack--LifeCycle、ViewModel、LiveData

还具有异步调用不会造成内存泄漏的优点,需要结合LiveData使用,ViewModel的生命周期是独立于Activity的 三、LiveData LiveData对象提供了可观测方法,当数据发送改变时...,并使用LiveData package com.aruba.livedata; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel...,并观测LiveData的值,ui线程中使用setValue方法设置LiveData的值,非ui线程使用postValue方法 package com.aruba.livedata; import androidx.appcompat.app.AppCompatActivity...,定义要联动的进度值 package com.aruba.livedata2; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel...进度值的观察,注意这边获取ViewModel时Owner要用Activity的上下文,因为实现联动需要使用同一个ViewModel,不同Owner会生成不同的实例 package com.aruba.livedata2

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

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

    一、LiveData 简介 ---- 在 视图 View 与 数据模型 Model 通过 ViewModel 架构组件 进行绑定后 , 可以立即 将 ViewModel 中的数据设置到 UI 界面中...这里引入 LiveData 架构组件 , 在 ViewModel 中 , 可以 通过 LiveData 将数据修改的信息发送给 视图 View , 通知 UI 界面进行修改 ; 场景举例 : 在 ViewModel...中申请 HTTP 服务器数据 , 请求发送后 , 不知道什么时候才能获得响应 , 如果 过一段时间服务器才反馈响应数据 , 此时只能 通过 LiveData 将 ViewModel 的数据修改通知给...; 使用 传统的开发方式 , 可以使用 线程通信 , Handler 或者 广播 等形式 , 在子线程中通知主线程更新 UI ; 使用 LiveData 后 , 将数据定义在 LiveData 中 ,...+ LiveData 进行通信 ; 在其中一个 Fragment 中设置 SeekBar 拖动条 , 将数值设置到另外一个 Fragment 中的 TextView 中显示 ; 1、ViewModel

    2K20

    【译】LiveData三连

    最引人注目的是LiveData类和相关的生命周期感知类、Room持久性库和新的分页库。在这篇文章中,我将探讨LiveData类,它期望希望解决的问题以及何时去使用这个库。...这意味着我们可以将LiveData对象保存到数据库中,之后再将其作为普通的LiveData进行观察。这让我们可以在代码中的一个地方保存数据,并让另一个地方的代码,观察它数据的改变。...这些组件的一个核心部分是带有LiveData的ViewModel,它是一个可观察到的生命周期感知的数据持有者,用于连接Activity和ViewModel。...因此,肯定会有一种试图最大限度地利用它们的诱惑:) 在这篇文章中,我将谈谈在什么情况下我不推荐使用LiveData,以及你可以使用的替代方案。...如果不需要持久化数据,那么在你的使用案例中,LiveData将无法实现其目的。 我们已经简要介绍了在哪些用例中使用LiveData是不合理的,甚至可能对你的功能和可扩展性造成一些限制。

    2.1K20

    再谈协程之viewmodel-livedata难兄难弟

    我们在开发的时候,通常会在Activity中发起请求,获取网络数据,然后在回调中渲染UI数据,这是一个比较标准的渲染流程,在这个原始的流程上,我们借助ViewModel,将数据与UI隔离,同时解决了数据生命周期的问题...的作用,它是连接ViewModel和Activity的桥梁,负责了数据的传递,所以,ViewModel和LiveData,完整了一个Activity的数据传递和数据生命周期的管理,将异步数据的请求流程,...架构的推荐方式就是: Activity中获取ViewModel ViewModel中通过LiveData管理数据 Activity中通过ViewModel获取LiveData订阅数据 这种方式的好处就是比...RxJava轻量,而且将数据和UI分离,便于单元测试,不像MVP那样臃肿的同时,也更难体现分层架构的独立职责。...val viewModel by viewModel { DataViewModel(1) } LiveData指北 看了ViewModel的使用之后,我们来看下LiveData怎么来打配合。

    1.4K40

    ViewModel 和 LiveData:为设计模式打 Call 还是唱反调?

    如果你的 ViewModel 里代码太多、承担了太多职责,试着去: 将一些代码移到一个和 ViewModel 具有相同生命周期的 Presenter。...可以将类中有状态和其他元数据(比如错误信息)的数据封装到一个类。参见示例代码中的 Resource 类。 ✅ 使用一个包装类或者 LiveData 来暴露状态信息。...这只会发生在系统需要资源或用户手动杀死应用程序时,如果数据仓库在 ViewModel 中持有对回调的引用,ViewModel 将发生暂时的内存泄漏。 ?...使用 LiveData 在数据仓库和 ViewModel 中通信。就像 View 和 ViewModel 之间那样。 ✅ 考虑边界情况,泄漏以及长时间的操作会对架构中的实例带来哪些影响。...继承 LiveData LiveData 最常见的用例是在 ViewModel 中使用 MutableLiveData 并且将它们暴露为 LiveData 来保证观察者不会改变他们。

    3.5K30

    【Jetpack】ViewModel + LiveData + DataBinding 综合使用 ( 核心要点说明 | 组合方式 | 代码示例 )

    向布局中设置数据模型对象 activityMainBinding.viewmodel = viewModel 2、LiveData 使用要点 LiveData 是基于 ViewModel...的 , 是 对 ViewModel 数据维护的一个补充 ; 在 Activity 中使用代码可以将 ViewModel 初始数据 设置给 视图组件 , 进行 初始状态显示 ; 如果 在运行过程中 ,...ViewModel 中的数据发生了变化 , 如何将变化应用到视图组件中 , 在视图中显示最新的数据内容 , 此时就用到了 LiveData 组件 ; 在 ViewModel 的基础上 , 通过 引入 LiveData..., 可以将 运行过程中 ViewModel 中的 Model 模型数据改变 通知 视图 View , 令视图组件显示最新的数据内容 ; 在 ViewModel 中使用了 LiveData 后 , 必须调用...ViewDataBinding#setLifecycleOwner 函数 将本 Activity 组件设置为 LiveData 的观察者即可 ; Activity 系统组件代码 : package kim.hsl.vld

    2.3K21

    今天撸一波Jetpack下的Lifecycle、ViewModel和LiveData

    ② ON_CREATE:创建LifecycleOwner(下面会讲这个类)时将触发此事件。 ③ ON_DESTROY:LifecycleOwner被销毁时将触发此事件。...LiveData会根据观察者绑定的LifecycleOwner的生命周期情况,来决定是否将数据改变的情况通知给观察者。...同时ViewModel会在configuration 更改时自动保留数据。 ? 官方给的建议是将LiveData和ViewModel配合来使用。...(key, viewModel); return (T) viewModel; } 如源码所示,当调用此get()方法时,ViewModelProvider将检查ViewModelStore是否已具有该类类型的现有...但是,如果不存在,那么将创建一个新的ViewModel并将其添加到ViewModelStore中。 获取到ViewModel 就可以使用里面的属性和方法来进行操作了。

    1.9K10

    【Jetpack】Room + ViewModel + LiveData 综合使用 ( 核心要点说明 | 组合方式 | 代码示例 )

    和 ViewModel , ViewModel 是 视图 View 与 数据模型 Model 之间 数据交互的 桥梁 ; LiveData 是基于 ViewModel 的 , 是 对 ViewModel...数据维护的一个补充 ; 在 ViewModel 中使用了 LiveData 后 , 先调用 LiveData#observe 函数 为 LiveData 设置 androidx.lifecycle.Observer...delete(id: Int) { var student = Student(id) this.dao.delete(student) } 特别注意 , 为了 将...将 Room 封装起来 , 由 ViewModel 与 Repository 进行交互 ; ViewModel 与 Room 结合使用 , 实际上与 Repository 进行交互 ; ViewModel...get(ViewModel::class.java) 然后 , 为 ViewModel 视图模型中获取的 LiveData 数据设置 Observer 监听 ; // 为 ViewModel

    1.8K20

    Android Jetpack - LiveData

    LiveData 对象连接到系统服务一次,然后任何需要该资源的观察者都可以只观看 LiveData 对象 使用 LiveData 使用 LiveData 的常规步骤如下,我们按照下面这些步骤写一个简单的例子...: 1、创建持有任意类型的 LiveData 实例,这一步通常在 ViewModel 中完成 2、创建一个 Observer 对象并重写其 onChanged() 方法,该方法会在 LiveData 数据更改时被回调并返回最新数据...LiveData 对象通常存储在ViewModel 对象中,并通过 getter 方法访问,如以下示例所示: class NameViewModel : ViewModel() { private...() { // 创建 ViewModel private val viewModel by lazy { ViewModelProviders.of(this).get(...具体可以参考 Android Jetpack - Room 一文所提供的代码示例 转换 LiveData 您可能希望在将 LiveData 对象分派给观察者之前更改存储在 LiveData 对象中的值,

    2.7K30

    LiveData的优势

    当观察的数据发生变化时,LiveData 会通知 [Observer]对象,实现被动更新,不需要主动去调用viewmodel获取数据。...如果看源码会发现Observe有一个version版本号,而LiveData也有一个版本号是否调用观察者通知数据变化就是比对这两个版本号是否一致,ViewModel会保存LiveData实例,当重建时LiveData...(ViewModel通过在OnDestory的时候保存到Configure属性中,当attach的时候取出这个属性里面的Viewodel赋值给组件,当Activity/Fragment重新get获取的时候拿到的就是上次的...ViewModel) 共享资源 可以使用单例模式扩展 [LiveData] 对象以封装系统服务,以便在应用中共享它们。...LiveData 对象连接到系统服务一次,然后需要相应资源的任何观察者只需观察 LiveData 对象。

    1.6K20
    领券