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

Android Architecture Paging Library详解 | Google IO大会上的最新发布

作 者 简 介 郭海生 Android高级工程师,6年以上开发经验,有丰富的代码重构和架构设计经验,负责京东商城我的京东的开发工作,热衷于学习和研究新技术。...KTX(Kotiln扩展程序) 本文主要介绍的是Paging,关于Navigation的解析,可以查看《Android Jetpack 新组件之Navigation的用法和源码结构分析》 >>>> 背景...现有的 Android API 允许内容的分页,但是都有明显的限制和缺陷: CursorAdapter(https://developer.android.com/reference/android...许多app经常性从大量数据源里加载数据,但是在某个时刻却只需要展示这些数据的一小部分。Paging library可以帮助你的app观察和展示一个合理的数据集合。...三种DataSource相同点:都有loadInitial()抽象方法,各自都封装了请求初始化数据的参数类型LoadInitialParams和接受请求参数的LoadInitialCallback。

1.5K20

一起看 IO | Jetpack 组件的新特性

增量数据获取 Paging 库可以让您加载和显示整体数据中的一小部分,从而改善网络与系统资源的消耗。...如需了解有关 Paging 3 的更多信息,请参阅 Android 开发者网站中全新简化版的教程: Paging Basics Codelab,它描述了如何在包含列表的应用中集成 Paging 库。...架构库指南 针对我们的核心架构库如何协同使用这一问题,如您想要了解更多信息,可以观看我们的视频与 文章 合集,这其中涵盖了现代 Android 开发最佳实践系列内容——MAD Skills: 架构。...界面库及指南 我们对界面库进行了一些更改,以更好地支持大屏幕兼容性、可折叠设备和 Emoji。...Core DataStore Fragment Lifecycle Navigation Paging Room WorkManager 查看 项目主页 可获得更多内容,包括我们如何处理拉取请求,以及如何开始使用

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

    使用 Paging 3 实现分页加载

    作者 / Florina Muntenescu Paging 库可以帮助您优雅地渐进加载大型数据集合,同时也可以减少网络的使用和系统资源的消耗。...让我们研究下需要实现的 Paging 组件,以及如何将 Paging 集成到现有的应用架构。...下图为您应用的各个层级中推荐直接接入 Paging 的 Android 应用架构: ? Paging 组件及其在应用架构的集成 定义数据源 数据源的定义取决于您从哪里加载数据。...由于 Paging 库并不知道您的 API 是怎样的,所以定义如何构造和获取前一页和下一页的远程数据的工作便需要由您自己来完成。...我们将 Paging 3 设计为一个帮您涵盖简单和复杂情形下的分页加载的库。它可以让您更方便地使用大规模数据集合,无论数据来自网络、数据库、内存缓存还是上述几种情况的组合。

    1.8K31

    JetPack--Paging3

    前面我们使用过Paging,最新版本Paging3和以前对比,有所改动 Paging2->Paging3三个模块改为: 1.DataSource->PagingSource : 数据从该模块中获取,数据可以来源于网络...、本地数据库等 2.PagedList->Pager : 负责具体获取数据的逻辑,何时获取、加载下一页、预加载等 3.PagedListAdapter->PagingDataAdapter : RecyclerView...,和上一页和下一页的两个Key,Key对应的第一个泛型 package com.aruba.paging3application.paging import android.util.Log import...PagingSource() { companion object { const val pageSize = 10 } //该办法只在初始加载成功且加载页面的列表不为空的情况下被调用...: Int = pageSize * DEFAULT_INITIAL_PAGE_MULTIPLIER, // 默认PagingConfig为pager分配初始获取数据的大小为

    70210

    Android Jetpack架构组件(九)之Paging

    一、Paging简介 在Android应用开发中,我们经常需要以列表的方式来展示大量的数据,这些数据可能来自网路,也可以来自本地的数据库。为了避免一次性加载大量的数据,对数据进行分页就显得很有必要。...为了方便开发者进行分页处理,Google为开发者提供了分页组件(Paging),借助Paging组件开发者可以轻松的加载和呈现大型数据集,同时在 RecyclerView 中进行快速、无限滚动。...并且,它可以从本地存储和/或网络加载分页数据,并让开发者能够定义内容的加载方式,同时它还支持与Room、LiveData 和 RxJava组合使用。...三、Paging3 3.1 概述 Paging是JetPack框架提供的一个分页库,它可以帮助开发者从本地存储或通过网络加载显示数据,不过由于历史原因,早期的Paging存在各种使用上的问题,因此Android...3.1.3 Paging3应用架构 下面是Android官方推荐的接入 Paging3的应用架构图。

    3.6K20

    Jetpack---Paging你知道怎样上拉加载吗?

    简介 2.1 基本介绍 官方定义: 分页库Pagin Library是Jetpack的一部分,它可以妥善的逐步加载数据,帮助您一次加载和显示一部分数据,这样的按需加载可以减少网络贷款和系统资源的使用。...用于存储加载到的数据 Config属性: pageSize:分页加载的数量 prefetchDistance:预加载的数量 initialLoadSizeHint:初始化数据时加载的数量,默认为pageSize...允许自定义如何加载初始页;该场景多用于评论信息等类似请求 PositionalDataSource:适用于目标数据总数固定,通过特定的位置加载数据,这里Key是Integer类型的位置信息,T即Value...,初始加载的数据 也就是我们直接能看见的数据 loadAfter: 下一页加载,每次传递的第二个参数 就是 你加载数据依赖的key loadBefore: 往上滑加载的数据 可以看到我们在loadInitial...中设置了initialLoad和netWorkState的状态值,同时通过RetrofitApi获取网络数据,并在成功和失败的回调中对数据和网络状态值以及加载初始化做了相关的设置,具体就不介绍了,可看代码

    1.8K40

    Jetpack 系列之Paging3,看这一篇就够了~

    通过上图我们也可以清晰的看出来,Paging在仓库层、ViewModel和UI层都有具体的表现,接下来我们通过一个示例来逐步讲解Paging是如何在项目架构中工作的。...从上图可以知道,load的方法 是我们通过Paging的配置自动触发的,不需要我们每次去调用,那么我们如何来使用DataSource呢?...Paging的加载状态 Paging3 为我们提供了获取Paging加载状态的方法,其中包含添加监听事件的方式以及在adapter中直接显示的方式,首先我们来看监听事件的方式 使用监听事件方式获取加载状态...是CombinedLoadStates数据类,有refresh、Append、Prepend 区别如下表格所示: refresh 在初始化刷新的使用 append 在加载更多的时候使用 prepend...除此之外,Paging3中还有一个比较重要的RemoteMediator,用来更好的加载网络数据库和本地数据库,我们后续有机会再为大家单独分享吧~ 2020年11月21日更新 paging3的设计理念是不建议对列表数据直接修改

    3.5K10

    Jetpack 系列之Paging3,看这一篇就够了~

    ://github.com/huanglinqing123/PagingDataDemo 欢迎start 和 issues Paging是什么 想想我们之前的业务中,实现分页加载需要怎么处理?...Paging在架构中的使用图 通过上图我们也可以清晰的看出来,Paging在仓库层、ViewModel和UI层都有具体的表现,接下来我们通过一个示例来逐步讲解Paging是如何在项目架构中工作的。...Paging的加载状态 Paging3 为我们提供了获取Paging加载状态的方法,其中包含添加监听事件的方式以及在adapter中直接显示的方式,首先我们来看监听事件的方式 使用监听事件方式获取加载状态...是CombinedLoadStates数据类,有refresh、Append、Prepend 区别如下表格所示: refresh 在初始化刷新的使用 append 在加载更多的时候使用 prepend...除此之外,Paging3中还有一个比较重要的RemoteMediator,用来更好的加载网络数据库和本地数据库,我们后续有机会再为大家单独分享吧~ 2020年11月21日更新 paging3的设计理念是不建议对列表数据直接修改

    2K20

    Android Jetpack之Paging

    Paging是Google 2018 IO大会最新发布的Jetpack中的一个组件,主要用于大数据的分页加载,这篇文章就来探索一下关于Paging的简单使用。...上述关于Paging的介绍参考Android.Arch.Paging: 分页加载的新选项 Paging的使用 导入Paging库: dependencies { def paging_version...Android dependencies for testing testImplementation "android.arch.paging:common:$paging_version"...data初始化101条数据进去,然后提供两个loadData和一个loadData方法,第一个loadData用于初始加载数据,第二个是根据index加载数据,loadPageData是分页加载数据 2...为null不会加载上一页 如果我们初始加载的是第三页,则上一页是2,下一页是4,此时加载的时候会加载当前页和调用loadAfter加载第4页,调用loadBefore加载第二页 分页加载的时候会将previousPageKey

    48021

    回顾 | Android Jetpack 重要更新

    Paging 3 — 分页加载显示数据内容 Paging 开发库可以帮助分页加载显示数据内容。我们发布了使用 Kotlin 的协程 重写的 Paging 3。...新版本添加了一些呼声较高的新功能,比如分隔符、标头和页脚,以及数据转换。此外,新版本还添加了用来监控列表加载状态的一系列的 API,以及重试和刷新的方法等。...下面的例子展示了如何利用 App Startup 来优化 WorkManager 的初始化时间,底层的实现是 App Startup 使用了一个共用的 ContentProvider,并代替了 WorkManager...请通过我们的文章《期待已久的动态数据库工具终于来了!》了解更多关于这个工具的内容以及如何使用它。...初始的发布版本提供了对于市面上已有以及即将上市的不同可折叠设备的支持,开发者可以利用其适配所有不同类型的硬件配置。了解更多相关内容,请查阅 博客文章 和 示例工程。

    27040

    Jetpack新成员,Paging3从吐槽到真香

    那么本篇文章,我们要学习的自然就是Paging 3了。 Paging 3简介 Paging是Google推出的一个应用于Android平台的分页加载库。...这是MVVM架构的一个重要组件,还不了解的朋友可以去参考《第一行代码 Android 第3版》第15章的内容。...我们只需要按照Paging 3搭建好的框架去编写逻辑实现,告诉Paging 3如何去加载数据,其他的事情Paging 3都会帮我们自动完成。...在底部显示加载状态 根据Paging 3的设计,其实我们理论上是不应该在底部看到加载状态的。...第二点,在onBindViewHolder()中会根据LoadState的状态来决定如何显示底部界面,如果是正在加载中那么就显示加载进度条,如果是加载失败那么就显示重试按钮。

    2.5K20

    Paging 3.0 简介 | MAD Skills

    欢迎阅读 MAD Skills 系列 之 Paging 3.0!在本文中,我将介绍 Paging 3.0 并重点说明如何将其集成至您应用的数据层。如果您更喜欢通过视频了解此内容,请 点击此处 查看。...如果您正在使用 Paging 2.0,那么 Paging 3.0 也为其前任所包含的功能提供了一系列改进: 优先支持 Kotlin 协程和 Flow。...如需获取更多内容信息,请查阅 Paging 2.0 到 Paging 3.0 的 迁移文档。...在 Paging 3.0 中,我们通过名为 PagingSource 的类型访问您的数据层,该类型定义了如何围绕 PagingConfig 所定义的范围获取和刷新数据。...这一方法会在初始加载或者响应用户滑动至边界时调用。load 方法会传入一个 LoadParams 对象,您可以通过它来确定如何触发 load 方法的调用。

    84230

    kotlin--综合运用Hilt、Paging3、Flow、Room、Retrofit、Coil等实现MVVM架构

    Jason老师的辛勤付出,动脑学院在B站上也有投稿koltin基础的视频,通过视频可以快速学习和上手kotlin 今天来综合使用各种组件,搭建最新MVVM项目框架,利用Paging3实现列表功能,Paging3...和Paging2一样,支持数据库缓存 一、依赖 主项目gradle中导入hilt插件 dependencies { classpath "com.android.tools.build...:创建一个依赖容器,该容器遵循Android类的生命周期 @Module:告诉Hilt如何提供不同类型的实例 @InstallIn:用来告诉Hilt这个模块会被安装到哪个组件上 @Provides...,可以获取到pageSize等一系列初始化配置的值 如果上一页最后一个item为空,那么表示列表加载到底了,否则获取到需要加载的当前page { //加载更多...函数还没有调用 4.App Starup image.png App Starup是JetPack的新成员,提供了在App启动时初始化组件简单、高效的方法,还可以指定初始化顺序,我们新建一个类继承于Initializer

    3.6K31

    360度无死角,Android Jetpack面试技巧大揭秘

    参考简答: ViewModel的作用在于解决Android应用中活动和碎片(Fragment)的生命周期问题。它允许数据在屏幕旋转等配置更改时存活,并确保数据在不同组件之间共享而不丢失。...数据共享:通过ViewModel,可以在不同的UI组件之间共享和管理数据,避免重复加载或丢失数据。 状态保存:ViewModel在配置变更时保持其状态,例如屏幕旋转,避免重新加载数据和执行耗时操作。...问题: 详细说明LiveData和ViewModel的工作原理,并讨论在实际项目中如何解决常见的生命周期问题。...而在需要更强大的操作符和背压处理的情况下,可以考虑使用Observable。 Paging库的性能优化 问题: 请解释Paging库的基本原理,并提出在处理大型数据集时如何进行性能优化。...出发点: 考察队Paging的日常运用,可以从它的一些特性进行回答 参考简答: Paging库通过在RecyclerView中异步加载数据,实现了对大型数据集的高效处理。

    28010

    Android Jetpack 学习笔记(1) - 概述

    消除样板代码: Jetpack 可以管理各种繁琐的后台任务、导航和生命周期管理等。 减少不一致: Jetpack 的组件库可在各种 Android 版本和设备中以一致的方式运作,助您降低复杂性。...paging * 在页面中加载数据,并在 RecyclerView 中呈现。 room * 创建、存储和管理由 SQLite 数据库支持的持久性数据。...Paging 3 — 增量加载和显示数据 Paging 3 是一个分页库,可帮助您以增量方式加载和显示小块数据。...导航 navigation添加了对动态功能模块的支持,允许您根据用户需要下载应用程序的各个部分,从而显着减少应用程序的初始下载大小。...UI 组件、深色主题支持、新的 UI 测试和动画 API、对 的初始支持ConstraintLayout、状态改进管理、与可观察流的集成和 RTL 支持。

    1.5K20

    2021最新Android架构师必备宝典《Android架构开发手册》含抖音、美团等大厂架构演进之路

    Android架构开发手册主要介绍Android框架的初始化过程及主要组件的工作原理。...其中的主要内容包括:Android Jetpack实战和教程MVC/MVP/MVVM,大厂架构演进之路等。...4.携程Android App插件化和动态加载实践 携程 Android App 的插件化和动态加载框架已上线半年,经历了初期的探索和持续的打磨优化,新框架和工程配置经受住了生产实践的考验。...本文将详细介绍 Android 平台插件式开发和动态加载技术的原理和实现细节,回顾携程Android App 的架构演化过程,期望我们的经验能帮助到更多的 Android 工程师。...6.千万级用户的Android客户端是如何养成的│架构师实践日 Android 客户端的架构不论如何演变,架构设计的出发点总是离不开两点,一是提高开发效率,二是降低维护成本。

    63930

    JetPack--Paging2

    Paging是一个用于分页加载的组件,对于一些列表数据,以前大家都使用过的一种方式是定义一个page,当达到加载更多条件时,page加一再去请求数据,为此我们要写很多重复的代码,Paging就对分页进行了一个封装...Paging由分为三个模块 1.DataSource:数据从该模块中获取,数据可以来源于网络、本地数据库等 2.PagedList:负责具体获取数据的逻辑,何时获取、加载下一页、预加载等 3.PagedListAdapter...int page, @Query("pagesize") int pagesize ); } 定义DataSource继承于PageKeyedDataSource,在初次加载和下一页加载中调用网络请求...,效果和上面是一样的 3.ItemKeyedDataSource ItemKeyedDataSource使用于不固定的数据列表,如帖子,因为新增帖子比较频繁,使用上面两种可能会出现重复数据,需要参数为实体类唯一值和数据量大小...二、本地数据缓存 BoundaryCallback 有时我们想要把数据缓存到本地,然后无网络时就可以加载本地数据,那么可以用BoundaryCallback 依赖Room数据库和刷新控件: implementation

    1.4K30
    领券