使用 SQLite、imageView 和可回收的 RecyclerView 性能 = false

Posted

技术标签:

【中文标题】使用 SQLite、imageView 和可回收的 RecyclerView 性能 = false【英文标题】:RecyclerView performance with SQLLite, imageViews and recyclable = false 【发布时间】:2020-08-31 03:38:06 【问题描述】:

这里有一个性能问题。我有一个 recyclerView(在一个片段中),我从一个数据库中填充它,该数据库最终将在一个表中保存大约 16,000 个项目,每条记录 18 列,没有什么比整数、小数和 varchars 更棘手的了,并且记录被分类所以我不要期望一次加载超过 300 个。我应该考虑限制选择还是实现某种分页?我更愿意让 recyclerView 保持简单且无缝滚动。

我也想知道 recyclerView 本身。这些行相当复杂,有两种状态:默认的折叠状态显示 6 个视图,包括一个 imageView,单击一行后,我们得到展开状态(容器从 GONE 变为 VISIBLE),总共有 21 个视图,包括 2 个 imageView。我关心 imageViews 的质量,所以我测试它的分辨率限制在 512px 的小图像(50% 屏幕宽度)和 1024px 的大图像(100% 屏幕宽度),一切都在 JPG 中。而且因为我需要跟踪行的状态,所以我使用了

holder.setIsRecyclable(false);

在我的 onBindViewHolder 中的 recyclerViewAdapter 中,因为没有它扩展一行会导致以下一些,回收的行也被扩展。而且我显然希望每一行都折叠起来,直到用户明确展开。所以问题是,recyclerView 滚动不那么流畅,当新行进入屏幕而旧行离开屏幕时,会出现明显的滚动延迟,反之亦然。在相当强大的设备(LG G7 Fit)上进行测试时,坦率地说,这种体验非常令人兴奋。我可以做些什么来优化性能(是的,我已经使用了 6 种不同尺寸的图像来实现不同的分辨率)。有没有比 recyclerView 更好的替代方案,不需要把所有东西都颠倒过来?

【问题讨论】:

【参考方案1】:

仅供参考,经过广泛测试后,我发现通过降低第一个(始终可见)imageView 中的图像分辨率,可以最大程度地提高滚动流畅度。

【讨论】:

以上是关于使用 SQLite、imageView 和可回收的 RecyclerView 性能 = false的主要内容,如果未能解决你的问题,请参考以下文章

如何解码保存到 SQLite 数据库并在 ImageView 中显示的图像文件路径

如何将位图从 ImageView 保存到数据库 sqlite?

回收 ImageView 的 Bitmap

使用类的回收站列表中未显示 Sqlite 数据

使用 sqlite kotlin 的回收站视图

使用 SimpleCursorAdapter 基于 sqlite 查询更新列表视图