Recyclerview滚动滞后

问题描述 投票:0回答:3

我在recyclerview的行中有多个元素 - >多个我的意思是数量上的多个以及多个类型,即多个图像视图,文本视图等。以下是要点,以便您可以看到所有元素:https://gist.github.com/Harshhb101/55e25da72e3a474aeeb422d5e231d3e3

问题是我需要根据一个最多可能有10个值的参数隐藏/显示这些元素。因此我将有10种类型的行。目前我只为行创建了一个布局,包含所有类型行的元素,在某些移动设备中,滚动有滞后。主要是我得到行有图像的滞后。我正在使用Glide加载图像。以下是onBindView:https://gist.github.com/Harshhb101/e10feb2cccda9d698ff06487bbb879ef的要点

我确实查看了stackoverflow,但找不到任何可靠的东西但是使用了多个视图。我的问题是,如果我重构我的代码,它会通过使用多个视图来产生重大影响吗?或者我的方法中有什么问题可以修复以获得良好的收益。

android android-recyclerview recycler-adapter recyclerview-layout
3个回答
0
投票

您需要缩小RecyclerView图像以节省内存并缓存它们。阅读this

此外,如果您的ViewHolder包含大小为wrap_content的图像,那么图像将被加载为完整大小,这对于性能非常不利,例如,如果屏幕上的视图大小为48dp x 48dp且图片为全高清,那么全高清可绘制将被加载到内存中是什么让你的滚动缓慢而不顺畅。

我建议在ViewHolder中使用固定大小或在Glide中加载时覆盖图像大小


0
投票
  • 请声明多种视图类型而不是多种视图类型。它实际上使代码更具可读性,但减少延迟并不多,因为循环视图/列表视图具有重用机制。
  • 建议在RecycleView中使用固定大小。
  • 我看到用于图像加载的Glide。那你配置缓存了吗?
  • 我怀疑你加载大分辨率图像

0
投票

在查看代码后,我发现了几项改进。

  1. 不要使God ViewType(所有类型的视图都有一种视图类型)。而是为每种帖子创建单独的视图类型。所以它将消除所有视图的渲染成本,并使它们在运行时可见和不可见。 Reference demo of recyclerview with multiple viewtypes
  2. 使用一些图像加载库,这样你就不必处理缓存图像和位图相关的操作(Picasso会很好)。 Picasso
  3. 最后避免在onbind()中执行繁重的任务,而是在设置recyclerview适配器之前专门为recyclerview准备数据类(如果需要大量的计算,如重字符串操作等)。
© www.soinside.com 2019 - 2024. All rights reserved.