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

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

, 每当数据库中数据发生变化时 , 就需要开启线程 , 重新获取数据库中数据 ; 为了优化上述问题 , 可以引入 LiveData ViewModel , ViewModel 是 视图 View... 更新视图 操作 ; 2、Google 官方建议 Room + ViewModel + LiveData 架构 下图是 Google 官方 提出 Room + ViewModel + LiveData...视图模型层 : 该层 不与 Room Retrofit 直接交互 , 而是与 Repository 层 进行交互 ; 在 ViewModel 层引入 LiveData 监听数据变化 , 如果数据发生变化则在...; 在 Room 框架中 Dao 数据库访问对象接口 定义方式需要作出改变 , 涉及到数据库查询 接口方法时 , 其返回值需要 返回 LiveData 类型 , 泛型设置为 List<Student...使用要点 在 Activity 组件中 , 通过调用 ViewModel 视图模型获取 数据库中数据 , ViewModel 调用 Repository增删改查方法 , Repository

66620

谷歌官方Android应用架构库——LiveData

3 个重要部分: onActive():当 LiveData 有一个处于活动状态观察者时该方法被调用,这意味着需要开始从设备观察位置更新。...vonInactive():当 LiveData 没有任何处于活动状态观察者时该方法被调用。由于没有观察者在监听,所以没有理由保持与 LocationManager 连接。...这是非常重要,因为保持连接会显著消耗电量并且没有任何好处。 setValue():调用该方法更新 LiveData 实例值,并将此变更通知给处于活动状态观察者。...ViewModel 可以轻松获取到 LiveData 并在它们上面定义转换规则。 创建新转换 在应用程序中可能会用到十几种不同特定转换,但是默认是不提供。...可以使用 MediatorLiveData 实现自己转换,MediatorLiveData 是为了用来正确监听其它 LiveData 实例并处理它们发出事件而特别创建

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

今天撸一波Jetpack下Lifecycle、ViewModelLiveData

LiveData处理逻辑如下图所示: ? 3.1 setValue() 当调用LiveDatasetValue(T value)方法时,将设置LiveData持有的数据。...同时如果之前LiveData已经被设置过数据了,那么观察者会立刻接收到最新数据。 如果之前LiveData没有观察者观察它,那第一次接受观察者会回调LiveDataonActive()方法。...④ postValue(T value):在子线程中给LiveData设置值。...同时ViewModel会在configuration 更改时自动保留数据。 ? 官方给建议是将LiveDataViewModel配合来使用。...但是,如果不存在,那么将创建一个新ViewModel并将其添加到ViewModelStore中。 获取到ViewModel 就可以使用里面的属性方法来进行操作了。

1.5K10

ViewModels and LiveData- Patterns + AntiPatterns

旋转是最常见情况,我们已经ViewModels覆盖了这种情况。所以,状态被保存在ViewModel中是安全。...使用LiveData在存储库ViewModel之间进行通信,其方式类似于在ViewViewModel之间使用LiveData。 这点Flow也可以解决。...img 如果你尝试这种方法,会有一个问题:如果你不能访问LifecycleOwner,你如何从ViewModel订阅Repository?...使用Transformations是解决这个问题一个非常方便方法。Transformations.switchMap让你创建一个新LiveData,对其他LiveData实例变化做出反应。...Extending LiveData LiveData最常见例是在ViewModels中使用MutableLiveData,并将它们作为LiveData公开,使它们从观察者那里不可改变。

1.1K30

App 组件化模块化之路——Android 框架组件(Android Architecture Components)使用指南

现在已经有了 UI 组件 ViewModel,那么我们如何将它们进行连接呢?这时候就需要用到 LiveData 组件了。...但细心朋友可能发现了:fragment 在 onActivityCreated 方法中添加了相应监听,但是没有在其它对应生命周期中移除监听。...有经验朋友就会觉得这是不是有可能会发生引用泄露问题呢?其实不然,LiveData 组件内部已经为开发者做了这些事情。即 LiveData 会再正确生命周期进行回调。...连接 ViewModel Repository 修改 UserProfileViewModel 类,引用 Repository 并且通过 Dagger 2 对 Repository 依赖进行管理。...UI 组件通过 ViewModel 访问数据,而 ViewModel 通过 LiveData 监听数据变化,并且使用 Repository 模式封装数据源。

1.6K20

Android实现优雅快速网络请求!

数据驱动ui,以LiveData为载体,将页面状态网络结果通过在LiveData返回给ui。...obserState()方法第二个参数中传入了UI引用。 不能达到"看方法如其意",如果是刚接触,会有很多疑问:为什么需要一个livedata作为方法参数。网络请求返回值去哪了?...Repository方法都有返回值,会返回结果,也不需要用livedata作为方法参数。 LiveData只存在于ViewModel中,LiveData不会贯穿整个请求链。...Repository中也不需要LiveData引用,Repository代码就是单纯获取数据。 针对多数据源,也非常好处理。 跟ui没任何关系,可以完全作为一个独立Lib使用。...单纯获取数据,ViewModel对数据进行处理发送。

89720

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

Architecture Components 构建 APP 中实体典型交互 理想情况下,ViewModel 不应该知道任何关于 Android 事情(如Activity、Fragment)...使用 LiveData 在数据仓库 ViewModel 中通信。就像 View ViewModel 之间那样。 ✅ 考虑边界情况,泄漏以及长时间操作会对架构中实例带来哪些影响。...继承 LiveData LiveData 最常见例是在 ViewModel 中使用 MutableLiveData 并且将它们暴露为 LiveData 来保证观察者不会改变他们。...一些通用模式是这样: 为 ViewModel 添加 start() 方法,并尽早调用这个方法。...(参见Blueprints example ) 设置一个控制启动加载属性 (参见 GithubBrowserExample ) ❌ 通常不用拓展 LiveData

3K30

谁能取代AndroidLiveData- StateFlow or SharedFlow?

Kotlin Coroutines最近引入了两种Flow类型,即SharedFlowStateFlow,Android社区开始思考这些新类型中一种或两种来替代LiveData可能性意义。...现在,SharedFlowStateFlow为这两个问题提供了一个解决方案。 A practical example 让我们一个实际例来说明。我们例是获取附近位置。...ViewModel没有任何变化,但是我们Activity现在接收是Flow而不是LiveData,所以它需要进行调整:不是观察LiveData,而是收集Flow。...❝注意:如果你通过在ViewModel中使用Flow.asLiveData()将你Repository Flow转换为LiveDataLiveData就会成为Flow唯一收集器,无论表现层中有多少个观察者...然而,为了使这种架构顺利运行,你需要保证你每个其他组件都从ViewModel访问你LiveData,而不是直接从Repository访问Flow。

1.5K20

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

根据LiveData特性决定它非常适合去做数据驱动UI,下面举个例子简单描述下: # 需求:改变textView内容以及对应数据,LiveData实现方式如下 val liveData = MutableLiveData...ViewModelLiveData真乃天作之合 Jetpack ViewModel 并不等价于 MVVM ViewModel 经常有小伙伴将Jetpack ViewModel MVVM ViewModel...传统MVVMMVP遇到最多问题无非就是多线程下内存泄露,ViewModel可以完全规避这个问题,内部viewModelScope是一个协程扩展函数,viewModelScope生命周期跟随ViewModel...ViewModelonClear方法,可以在该方法做一些释放资源操作,进一步降低内存泄露风险 解除你对DataBinding误解 使用DataBinding作用有哪些?...UI逻辑处理 Repository(远程): 代表远程仓库,从Repository取需要数据 ViewModel: Repository取出数据需暂存到ViewModel,同时将数据映射到视图层

1K31

【译】LiveData with Coroutines and Flow

有数百篇博客文章以不同方式定义Presenter、ViewModel、MVPMVVM。我建议是,你专注于你表现层特性,使用Android架构组件ViewModel。...这个订阅可以LiveData.observe设置,也可以Data Binding库自动设置。 现在,如果设备被旋转,那么视图将被销毁(#1),并创建一个新实例(#2)。...但有了ViewModel+LiveData,我们就不必再处理这个问题了。这就是为什么我们在《应用程序架构指南》中推荐这种方法。...因此,我们可以从数据源存储库中暴露Flow,而不是LiveData,但ViewModel仍然暴露LiveData,因为它是生命周期感知。...(it) } .asLiveData() Repository patterns 关于资源库没有什么好说,因为如果你在使用Flow,你只需要使用FlowAPI来转换组合数据。

1.4K10

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

那么 Flow 为我们解决了什么问题,我主要从以下几个方面思考: LiveData 是一个生命周期感知组件,最好在 View ViewModel 层中使用它,如果在 Repositories 或者...DataSource 中使用会有几个问题 它不支持线程切换,其次不支持背压,也就是在一段时间内发送数据速度 > 接受数据速度,LiveData 无法正确处理这些请求 使用 LiveData 最大问题是所有数据转换都将在主线程上完成...,只会接受最新一次发射过来数据 调用 _pokemon.postValue 方法将数据提供给 Activity 或者 Fragment 方法二 在 LifeCycle 2.2.0 之后,可以更精简方法来完成...PS:需要注意是 flow { ... } liveData{ ... } 内部都有一个 emit() 方法。...请求完成 }.asLiveData() 因为 polemonRepository.featchPokemonInfo(name) 是一个 suspend 修饰方法,所以在 ViewModel

4.1K20

Android Jetpack架构组件(四)之LiveData

二、 LiveDataViewModel关系 在Jetpack架构中,ViewModel主要作用是存储各种数据,当然,我们也可以在ViewModel中处理一些数据逻辑。...通过使用observe()方法将上述LiveData对象Observer对象关联在一起。...对象 LiveData 本身没有公开可用方法来更新存储数据,如果需要修改LiveData数据,可以使用MutableLiveData 类将公开 setValue(T) postValue(T...LiveData生命周期变化观察 前面介绍LiveData用法时候提到,首先,我们创建 LiveData 实例,然后调用LiveDataobserve方法来注册观察者,将ViewModelLiveData...Active状态处于Active状态组件数量,来对onActive方法onInactive方法进行回调,我们可以使用这两个方法拓展LiveData对象。

2.8K00

Android 架构组件 - 让天下没有难做 App

,那么只需要借助 Lifecycle 去监听生命周期状态事件即可,再也不用覆写各种回调方法了。...下面将要讲到 LiveData ViewModel 都是 Lifecycle-Aware Components,它们都用到了 Lifecycle。...至此,我们可以确定,无论数据来自 Remote 还是来自本地 DB,架构蓝图中 RepositoryViewModel 提供数据可以永远是 LiveData 类型,接下来我们看一下 ViewModel...拿到数据是 Repository,可能不适用于 UI 元素,所以 ViewModel 还承担了数据适配工作,有时候我们需要汇总 repository 多个返回值一次性给到 UI,那么就可以使用...Repository 拿到 Dao DataSource.Factory 之后,调用它 toLiveData 方法并传入 PagedList.Config,然后生成一个分页 LiveData<PagedList

1.2K20

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

LiveData 组件还遵循应用组件(如 Activity、Fragment Service)生命周期状态,并包括清理逻辑以防止对象泄漏过多内存消耗。...另外,注意到暴露获取LiveData方法 返回LiveData类型,即不可变,而不是MutableLiveData,好处是避免数据在外部被更改。...实现 ViewModel 第一个想法可能是 使用Retrofit/Okhttp调用接口 来获取数据,然后将该数据设置LiveData 对象。...ViewModel 会将数据获取过程委派给一个新模块,即RepositoryRepository模块会处理数据操作。它们会提供一个干净 API,以便应用内其余部分也可以轻松获取该数据。...此方法就是调用Repository来执行,并且把数据设置LiveData

1.9K10

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

根据LiveData特性决定它非常适合去做数据驱动UI,下面举个例子简单描述下: # 需求:改变textView内容以及对应数据,LiveData实现方式如下 val liveData = MutableLiveData...ViewModelLiveData真乃天作之合 3.1 Jetpack ViewModel 并不等价于 MVVM ViewModel 经常有小伙伴将Jetpack ViewModel MVVM ViewModel...传统MVVMMVP遇到最多问题无非就是多线程下内存泄露,ViewModel可以完全规避这个问题,内部viewModelScope是一个协程扩展函数,viewModelScope生命周期跟随ViewModel...ViewModelonClear方法,可以在该方法做一些释放资源操作,进一步降低内存泄露风险 4....UI逻辑处理 Repository(远程): 代表远程仓库,从Repository取需要数据 ViewModel: Repository取出数据需暂存到ViewModel,同时将数据映射到视图层

1.9K80

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

根据LiveData特性决定它非常适合去做数据驱动UI,下面举个例子简单描述下: # 需求:改变textView内容以及对应数据,LiveData实现方式如下 val liveData = MutableLiveData...ViewModelLiveData真乃天作之合 3.1 Jetpack ViewModel 并不等价于 MVVM ViewModel 经常有小伙伴将Jetpack ViewModel MVVM ViewModel...ViewModelonClear方法,可以在该方法做一些释放资源操作,进一步降低内存泄露风险 4....5.1 什么是MVVM MVVM其实是前端领域一个专注于界面开发架构模式,总共分为View、ViewModelRepository三个模块 (需严格按照单一设计原则划分) View(视图层): 专门做视图渲染以及...UI逻辑处理 Repository(远程): 代表远程仓库,从Repository取需要数据 ViewModel: Repository取出数据需暂存到ViewModel,同时将数据映射到视图层

82300
领券