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

Android Jetpack架构组件(九)之Paging

[在这里插入图片描述] 网路 Android应用开发中,对网路数据进行分页加载是一种比较常见的场景,也是我们平时开发中遇到得最多的。...ViewModel一般都使用LiveData来跟UI层交互,Flow的扩展函数可以直接转换成一个LiveData可观察对象。...而load方法的参数LoadParams中有一个key值,可以加载下一页数据使用。...如果要创建 PagingData 数据流,那么需要创建一个 Pager 实例,并提供一个 PagingConfig 配置对象和一个可以告诉 Pager 如何获取您实现的 PagerSource 的实例的函数...而在MVVM中,我们需要构建ViewModel来实现是LiveData和UI层交互,而ViewModel的Flow的扩展函数可以将直接将PagingSource转换成一个LiveData可观察对象,代码如下

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

Android消息总线的演进之路:用LiveDataBus替代RxBus、EventBus

没有EventBus之前我们通常用广播来实现监听,或者自定义接口函数回调,有的场景我们也可以直接用Intent携带简单数据,或者在线程之间通过Handler处理消息传递。...最后就是取消订阅的操作了,RxJava中,订阅操作会返回一个Subscription对象,以便在合适的时机取消订阅,防止内存泄漏,如果一个类产生多个Subscription对象,我们可以用一个CompositeSubscription...正是由于LiveData对组件生命周期可感知特点,因此可以做到仅在组件处于生命周期的激活状态才更新UI数据。 LiveData需要一个观察者对象,一般是Observer类的具体实现。...当观察者的生命周期处于STARTED或RESUMED状态LiveData会通知观察者数据变化;观察者处于其他状态,即使LiveData的数据变化了,也不会通知。...Room 一个强大的SQLite对象映射库。 ViewModel 一类对象,它用于为UI组件提供数据,设备配置发生变更依旧可以存活。

2.3K30

Android-Jetpack笔记-Paging结合数据库

平时使用RecyclerView,下拉刷新先更新数据然后调用Adapter.notifyDataSetChanged全量更新,修改条目则先更新数据,然后调用Adapter.notifyItemXXX...paging-runtime:$paging_version" 创建一个ViewModel //PagingViewModel.java private UserDao mUserDao; //dao对象用来从数据库中获取数据...private LiveData> mLiveData; //可观察的数据源 public LiveData> getLiveData...) // 是否启用占位符(本地数据比较合适,因为远程数据是未知的) .build(); //用room返回的DataSource.Factory来构建数据列表...原理 下面将带着两个问题,逐步分析内部实现: submitList如何diff数据,刷新UI LivePagedListBuilder如何构建数据源 submitList如何diff数据,刷新UI PagedListAdapter

85230

DataBinding和LiveData搞在一起了

最近在工作中一个页面使用了 DataBinding ,实践了一下 Databinding 和 LiveData 的结合。今天就来分享一下具体的内容。...本篇文章适合对 Databinding 及 LiveData 有过了解(阅读过文档即可),阅读时间约 20 分钟 在过完 Databinding 文档的时候,首先看到了利用 Observable 接口的子类来实现使用可观察数据对象...但是 Observable 对象毕竟是不可以与生命周期绑定的,数据监听我们还是比较希望能使用 LiveData去做。当然后面官方也提供了和 LiveData 结合的使用方式。...LiveDataListener 对象,这里构造的对象没有绑定 WeakListener 的时候会构造出来然后传入: protected void registerTo(int localFieldId...>> 实现了 androidx.lifecycle.Ovserver 和 androidx.databinding.ObservableReference,构造函数里面: public LiveDataListener

1.5K10

Jetpack源码解析—LiveData的使用及工作原理

当生命周期状态改变LiveData会向Observer发出通知。 您可以把更新UI的代码合并在这些Observer对象中。...LiveData会进行自动管理这些事情,因为观察,它会感知到相应组件的生命周期变化。 5. 始终保持最新的数据 如果一个对象的生命周期变到非活跃状态,它将在再次变为活跃状态接收最新的数据。...Demo中通过对一个LiveData对象进行生命周期的监听,实现将值打印控制台中。...onStart()日志,因为我们将liveData的值和Fragment的生命周期进行了绑定,当返回桌面或者销毁Fragment的时候,LiveData的值会变成相应的生命周期函数,并打印控制台中:...类,可以帮助我们实现这样的场景: 通过**Transformations.map()**使用一个函数来转换存储 LiveData对象中的值,并向下传递转换后的值: LiveDataViewModel

99520

AAC---LiveData

LiveData这种方式会使得不用再考虑Activity或者Fragment的泄露,当生命周期结束,会自动销毁Observer对象。...LiveData对象一旦连接系统Service,当有Observer需要资源的话,就可以监听LiveData对象了 使用方法 build.gradle中添加配置 dependencies {...MutableLiveData:可变的LiveData 普通的LiveData将setValue以及postValue的作用于定义成protected,除非继承LiveData否则访问这两个函数。...而MutableLiveData只是Override这两个函数,将protected作用域扩大成了public,以至于外部可以访问。...LiveData,而当数据库中数据有改变,该LiveData也会收到最新的数据 ViewModel: ViewModel的作用也就是请求数据,或者做一些前台耗时操作,当数据返回或者操作完成后,通过LiveData

1.1K20

LiveData三问—阿里真题

这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。 官方介绍如下,其实说的比较清楚了,主要作用在两点: 数据存储器类。也就是一个用来存储数据的类。 可观察。...其次,LiveData还能无缝衔接到MVVM架构中,主要体现在其可以感知到Activity等生命周期,这样就带来了很多好处: 不会发生内存泄漏 观察者会绑定到 Lifecycle对象,并在其关联的生命周期遭到销毁后进行自我清理...不会因 Activity 停止而导致崩溃 如果观察者的生命周期处于非活跃状态(如返回栈中的 Activity),则它不会接收任何 LiveData 事件。...对象没有任何活跃观察者,会调用 onInactive()方法。...说说LiveData原理。 说到原理,其实就是两个方法: 订阅方法,也就是observe方法。通过该方法把订阅者和被观察者关联起来,形成观察者模式。

47730

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

2.3 高级用法 如果希望LiveData 对象分派给观察者之前对存储在其中的值进行更改,或者需要根据另一个实例的值返回不同的 LiveData 实例,可以使用LiveData中提供的Transformations...//两个liveData,由liveDataSwitch决定 返回哪个livaData数据 MutableLiveData liveData3 = new MutableLiveData...Transformations.switchMap()就用于实现这一逻辑,返回值liveDataSwitchMap添加观察者就可以了。...: 与存储本地数据库中的数据关联的 liveData5 与从网络访问的数据关联的 liveData6Activity 只需观察 MediatorLiveData 对象即可从这两个源接收更新。...* 观察者只LifecycleOwner活跃接受事件,如果变为DESTROYED状态,observer自动移除。 * 当数据非活跃更新,observer不会接收到。

3.9K30

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

, 以及 将该抽象类设置成 单例类 , 单例对象初始化时创建数据库 ; Room 框架中的 Dao 数据库访问对象接口 的定义方式需要作出改变 , 涉及到数据库查询的 接口方法 , 其返回值需要...ViewModel 中维护 数据库 的 增删改查 的对应函数 , 通过调用 Repository 成员边来那个实现对数据库的操作 , 查询函数返回值是 LiveData 类型的 ; fun...返回值外的正常查询方法 Room 框架 与 LiveData 结合使用之后 , Room 框架中的 Dao 数据库访问接口中 定义了 LiveData 返回值类型的查询方法 ; /**...> 查询方法 , 只能在数据库数据发生改变被动回调才能查询出数据 , 如果主动调用该方法查询数据库 , 会返回一个空数据的 LiveData ; 如果想要手动主动查询数据库 , 需要保留非 LiveData... Room 框架中的 Dao 数据库访问对象接口 的定义方式需要作出改变 , 涉及到数据库查询的 接口方法 , 其返回值需要 返回 LiveData 类型 , 泛型设置为 List<Student

62420

LiveData的前世今生

虽然从原则上看,普通的LiveData对象确实可以用于此,但它也带来了一些问题。 一个List/Detail模式中,这里是列表的ViewModel。...用户点击按钮,于是跳转了Detail界面 用户按下返回键,回到列表界面中去 观察者Activity处于Pause的堆栈中,会变成不活动状态,返回,会再次成为活动状态 但此时,观察的值仍然是True...确保你的用户界面与你的数据状态相匹配:LiveData遵循观察者模式,当生命周期状态改变LiveData会通知观察者对象。你可以整合你的代码来更新这些观察者对象中的UI。...你的观察者可以每次应用数据变化(生命周期变化)更新UI,而不是每次有变化时更新UI。 没有内存泄漏:观察者被绑定到生命周期对象,并在其相关的生命周期被销毁进行自我清理。...通过使用LiveData,我们希望代码中使用函数式编程的优势,而函数式编程的原则之一是使用不可变的数据结构。这个原则将被Jose推荐的解决方案所打破。

1.1K10

Jetpack之LiveData详解

简介 LiveData 是Jetpack中的一个组件,是一个可被观察的数据存储器类, 具有感知组件生命周期的能力,LiveData 可以感知组件生命周期活跃状态发送数据更新,组件销毁移除观察者对象,...在给 LiveData 添加观察者对象的时候可以绑定一个具有生命周期的组件,当组件生命周期处于活跃状态(即 STARTED 、RESUMED 状态)时数据更新才会通知观察者,当组件被销毁则会自动移除对应的观察者对象...LifecycleOwner 接口的对象)处于活跃状态即 STARTED 或 RESUMED 状态就会触发 Observer 的回调从而更新 mTextView 的值,即进行 UI 数据更新。...它新增了两个方法 addSource 、removeSource 用于添加和删除 LiveData 源 Observer: 观察者接口,通过该接口对 LiveData 数据进行观察 2、详细使用 MutableLiveData...他们的作用都是将一个 LiveData 转换为另一个 LiveData 对象,当一个 LiveData 里的值发生改变另一个 LiveData的值也随之发生改变。

1.6K20

带你了解LiveData重放污染的前世今生

虽然从原则上看,普通的LiveData对象确实可以用于此,但它也带来了一些问题。 一个List/Detail模式中,这里是列表的ViewModel。...用户点击按钮,于是跳转了Detail界面 用户按下返回键,回到列表界面中去 观察者Activity处于Pause的堆栈中,会变成不活动状态,返回,会再次成为活动状态 但此时,观察的值仍然是True...确保你的用户界面与你的数据状态相匹配:LiveData遵循观察者模式,当生命周期状态改变LiveData会通知观察者对象。你可以整合你的代码来更新这些观察者对象中的UI。...你的观察者可以每次应用数据变化(生命周期变化)更新UI,而不是每次有变化时更新UI。 没有内存泄漏:观察者被绑定到生命周期对象,并在其相关的生命周期被销毁进行自我清理。...通过使用LiveData,我们希望代码中使用函数式编程的优势,而函数式编程的原则之一是使用不可变的数据结构。这个原则将被Jose推荐的解决方案所打破。

1.2K10

LiveData 还有学习的必要吗?—— Jetpack 系列(2)

: 当宿主生命周期进入消亡(DESTROYED)状态LiveData 会自动移除观察者,避免内存泄漏; 2、安全地回调数据: 宿主生命周期状态低于活跃状态(STAETED)LiveData 不会回调数据... LiveData#considerNotify(Observer) 尝试分发数据,会判断观察者持有版本号是否小于 LiveData 的版本号(Observer#mLastVersion >= LiveData...LiveData 重放问题需要区分场景来看 —— 状态适合重放,而事件不适合重放: 当 LiveData 作为一个状态使用时,注册新观察者重放已有状态是合理的; 当 LiveData 作为一个事件使用时...,注册新观察者重放已经分发过的事件就是不合理的。... UnPeekLiveData 中会有一个原子整型来标记数据版本,并且每个 Observer 注册时会拿到当前 LiveData 的最新数据版本,而在 Observer#onChanged 中会对比两个版本号来决定是否分发

3.5K10

Android | LiveData 源码分析

日常开发过程中,LiveData 已经是必不可少的一环了,例如 MVVM 以及 MVI 开发模式中,都用到了 LiveData。...有了这关系,当 Lifecycle 对象状态为 DESTORYED ,便可以移除这个观察者。 使用 LIveData 具有以下优势: 确保界面符合数据状态:数据发生变化时,就会通知观察者。...,它会在变为活跃状态接收最新数据 配置更改后也会接收到最新的可用数据 共享资源,可以使用单例模式扩展 LiveData 对象,以便在应用中共享他们 LiveData 的使用 LiveData 是一种可用于任何数据的封装容器...,通常 LiveData 存储 ViewModel 对象中。...= null) //根据条件返回对应的 livedata else //根据条件返回对应的 livedata } 合并多个 LiveData var live1 =

97720

【译】LiveData三连

这就是LiveData的神奇之处。视图模型返回LiveData,它是一个可观察的类,从而使我们的Activity成为观察者。就像基于事件的解决方案一样,当数据被改变,我们会相应地改变用户界面。...我们的例子中,视图模型从UserRepository类中获得其返回值,该类保留了一个LiveData的实例,该实例包裹着一个数据持有者FollowStatus。...这确保了使用LiveData,UI组件始终是最新的,即使它在某一刻变得不活跃,因为它在再次变得活跃收到最新的数据。...这意味着我们可以将LiveData对象保存到数据库中,之后再将其作为普通的LiveData进行观察。这让我们可以代码中的一个地方保存数据,并让另一个地方的代码,观察它数据的改变。...整个公共API是一个方法contacts() ➖不可能为加载函数提供参数。 ➖我们构造函数中进行工作。

1.6K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券