Recyclerview滚动滞后

时间:2019-04-10 05:59:22

标签: android android-recyclerview recycler-adapter recyclerview-layout

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

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

我确实查看了stackoverflow,但是找不到任何可靠的东西,但是使用了多个视图持有者。我的问题是,如果我重构代码,使用多个视图持有者是否会带来实质性的改变?还是我的方法有问题,可以解决以获得良好的效果。

3 个答案:

答案 0 :(得分:0)

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

如果您的ViewHolder包含大小为wrap_content的图像,则将图像全尺寸加载,这对性能确实不利,例如,如果屏幕上的视图尺寸为48dp x 48dp并且图片为全高清,则将加载全高清可绘制图像进入内存会使滚动缓慢且不流畅。

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

答案 1 :(得分:0)

查看代码后,我发现了一些改进。

  1. 请勿设置God ViewType(所有视图的一种视图类型)。而是创建 每种帖子的个人视图类型。因此它将消除所有视图的渲染成本,并使它们在运行时可见和不可见。 Reference demo of recyclerview with multiple viewtypes
  2. 使用一些图像加载库,这样您就不必处理缓存图像和与位图相关的操作(Picasso会很好)。 Picasso
  3. 最后,避免在custom_dialog.setFixedSize(custom_dialog.size()) 中执行繁重的任务,而应在设置recyclerview适配器之前为recyclerview专门准备数据类(如果需要大量计算,例如繁重的字符串操作等)。

答案 2 :(得分:0)

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