当前位置: 首页 > news >正文

Android---Jetpack之Paging

目录

Paging 组件的意思

Paging 支持的架构类型

Paging 的工作原理

PositionalDataSource

PagekeyedDataSource

ItemKeyedDataSource

BoundaryCallback

Paging 组件的意思

分页加载是在应用程序开发过程中十分常见的需求,Paging 就是 Google 为了方便 Android 开发者完成分页加载而设计的一个组件,它为几种常见的分页机制提供了统一的解决方案,让我们可以把更多的精力专注在业务代码上。

Paging 支持的架构类型

 \bullet 网络

对网络数据进行分页加载,是最常见的一种分页需求,也是我们学习的重点。不同的公司针对分页机制所设计的 API 接口通常也不太一样,但总体而言可以归纳为3种。Paging 组件提供了3种不同的方案,以应对不同的分页机制。分别是 PositionDataSourcePageKeyedDataSourceItemKeyedDataSource

\bullet 数据库

掌握了网络数据分页之后,数据库数据分页将会容易很多,无非就是数据源的替换。

 \bullet 网络+数据库

出于用户体验的考虑,我们通常会对网络数据进行缓存,以便用户在下次打开应用程序时,应用程序可以先展示缓存数据。我们通常会利用数据库对网络数据进行缓存,这意味着我们需要同时处理好网络和数据库这两个数据源。多数据源会让业务逻辑变得更为复杂,所以,我们通常采用单一数据源作为解决方案。即从网络获取的数据,直接缓存进数据库,列表只从数据库这个唯一的数据源获取数据,这里我们会学习 BoundaryCallback。 

Paging 的工作原理

Paging 的3个核心类

\bullet PagedListAdapter

 RecyclerView 需要搭配适配器使用,如果希望使用 Paging 组件,适配器需要继承自

PagingListAdapter

\bullet PagedList

 PagedList 负责通知 DataSource 何时获取数据,以及如何获取数据。例如,何时加载第一页/下一页,第一页加载的数量、提前多少条数据开始执行预加载等,从 DataSource 获取的数据将存储在 PagedList 中

\bullet DataSource

在 DataSource 中执行具体数据载入工作,数据可以来自网络,也可以来自本地数据库。根据分页机制的不同,Paging 为我们提供了3种 DataSource。数据的载入需要在工作线程中进行。

PositionalDataSource

适用于可通过任意位置加载数据,且目标数据源数量固定的情况。例如,请求时携带的参数为 start = 2&count = 5,则表示向服务端请求从第2条数据开始往后的5条数据。

DiffUtil

DiffUtil 用于计算两个数据列表之间的差异,它只会更新需要更新的数据,而不需要刷新整个数据源。

\bullet areItemsTheSame:检测两个对象是否代表同一个 item

\bullet areContentsTheSame:检测两个 Item 是否存在不一样的数据

PagekeyedDataSource

适用于数据源以页的方式进行请求的情况, 例如,若请求时携带的参数为 page=2&pageSize=5,则表示数据源以5条数据为一页,当前返回第二页的5条数据。

ItemKeyedDataSource

适用于当目标数据的下一页需要依赖上一页数据中最后一个对象中的某个字段作为 key 的情况,此类分页形式常见于评论功能的实现。例如,若上一页数据中最后一个对象的 key 为 9001,那么在请求下一页时,需要携带参数 since=9001&pageSize=5,则服务器会返回 key=9001 之后的5条数据。

BoundaryCallback

http://www.lryc.cn/news/59876.html

相关文章:

  • gensim.models.word2vec() 参数详解
  • 光栅和矢量图像处理SDK:Graphics Mill 11.7Crack
  • 阿里云的客服 锻炼你心性的 一种方式 !!!
  • Linux常用的网络命令有哪些?快速入门!
  • PMP认证价值在哪?这个证书有什么用?
  • 一条更新语句的执行流程又是怎样的呢?
  • promise异步编程指南
  • 20230411----重返学习-网易云音乐首页案例-git远程仓库
  • Ansys Zemax | 模拟 AR 系统中的全息光波导:第二部分
  • 常用Git命令
  • 新手程序员被职场PUA的时候正确的化解姿势
  • LINUX_kali学习笔记
  • 第十天面试实战篇
  • YML是一种数据存储格式
  • 笔记:Java关于轻量级锁与重量级锁之间的问答
  • 有哪些通过PMP认证考试的心得值得分享?
  • 【unity learn】【Ruby 2D】角色发射飞弹
  • C++模板基础(九)
  • 【剑指 Offer】(1)
  • 每日一题 leetcode1026 2023-4-18
  • 【Python_Scrapy学习笔记(十二)】基于Scrapy框架实现POST请求爬虫
  • 《花雕学AI》02:人工智能挺麻利,十分钟就为我写了一篇长长的故事
  • 做程序员累了想要转行?我想给大家分享一下看法
  • 如果你想从事人工智能职业,学习Python吧
  • 百模大战,谁是下一个ChatGPT?
  • Revit中怎么绘制多面坡度的屋顶及生成墙
  • 【jvm系列-07】深入理解执行引擎,解释器、JIT即时编译器
  • 【GCU体验】基于PaddlePaddle + GCU跑通模型并测试GCU性能
  • 解析hash(散列)数据结构
  • 《2023金融科技·校园招聘白皮书》新鲜出炉|牛客独家