【问题标题】:Android: Handling large data list in very slow RecyclerViewAndroid:在非常慢的 RecyclerView 中处理大数据列表
【发布时间】:2021-02-20 17:40:40
【问题描述】:

我是 Android 开发新手,想在视图中显示一个列表(行 = 图像 + 文本 + 按钮)。

该列表将包含 1000 多个项目。目前我正在使用 RecyclerView 但加载信息需要相当长的时间。

添加日志后,我发现获取数据(1000 项)大约需要 1000 毫秒,这完全没问题,而一开始显示列表还需要 5000 毫秒。列表显示后,上下滚动非常流畅。

我的理解是 RecyclerView 会自动处理每一行的视图创建,这样

  1. RecyclerView 只会为当前屏幕呈现几个项目,而任何低于或需要向下滚动的内容都将在运行时呈现
  2. RecyclerView 只会渲染尽可能多的行

如果 1) 是正确的,那还有机会优化吗?如果 2) 是正确的,这意味着我需要找到一种聪明的优化方式,比如分页?

由于我对 Android 开发还很陌生,所以我不确定要深入研究的方向。

  1. 我是否应该在 UI 上进行分页:获取 1000 个项目并存储在一个 List 中,然后每次加载 10 个项目,当滚动到最底部时,再加载 10 个项目,直到最后?
  2. 我是否应该对数据获取进行分页:获取 10 个项目并呈现 10 行,当滚动到最底部时,再获取 10 个项目并呈现新的 10 行,直到最后?

哪个是正确的?

  1. 还有向下滚动的时候,前面的10个项目怎么能坚持下来呢?我需要手动处理上下滚动吗?

对于菜鸟问题​​很抱歉,但希望我把这个问题说清楚。

【问题讨论】:

  • fetch 是指从服务器还是从本地数据库中提取数据?
  • @mingchen 在我的情况下并不重要,因为获取整个批次只需要 1000 毫秒,这已经足够了,与 >5000 毫秒的 UI 渲染相比......

标签: android android-recyclerview


【解决方案1】:

即使回收器视图动态生成视图,您也不应该将大量数据直接操作到回收器视图。

考虑使用 Android 的分页库。 https://developer.android.com/topic/libraries/architecture/paging

【讨论】:

  • 你认为批量获取数据,存储在一个大数组中,并使用滚动侦听器进行馈送,比在滚动侦听器期间获取数据更好吗?
【解决方案2】:

首先显示列表还需要 5000 毫秒。名单后 显示,上下滚动时非常流畅。

基于此,我建议您查看您可能首先进行的任何数据操作(如果有的话),因为问题可能首先不是 recyclerView

如果你要优化recyclerview,确实有一种技术可以为recyclerView使用分页

【讨论】:

  • 你认为批量获取数据,存储在一个大数组中,并通过滚动侦听器提供,比在滚动侦听器期间获取数据更好吗?
  • 我不这么认为。在我看来,获取数据比在 recyclerView 中加载数据更昂贵。因此,当您使用分页技术时,最好也包括数据获取
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
  • 2011-09-26
  • 2021-11-11
  • 1970-01-01
  • 2014-01-03
相关资源
最近更新 更多