在 viewpager 的 recyclerview 中加载大数据的性能问题
Performance issue with loading large data in recyclerview in a viewpager
我的设置包括两个使用 viewpager 设置的选项卡。每个选项卡都包含一个片段,其中包含一个显示歌曲列表的回收视图。
问题是,当将大量歌曲加载到 recyclerview 时,ui 会冻结一段时间。对于超过 2000 首歌曲的数量,系统会长时间冻结,然后抛出 OutOfMemory
错误。
注意:以简单的片段或activity将数据加载到recyclerview中,即使数据集非常大,也完全没有性能问题。
我该如何优化它?
如果只想显示歌曲的基本信息,可以使用List作为数据,SongInfo中包含名称、专辑、歌手...等,不会占用太多内存
于是我找到了问题的根源。 NestedScrollView 内的 Recyclerview。因为我要显示三个 RecyclerView,所以我不得不使用 NestedScrollView 来包装它们。但是从这个 ,我了解到在 nestedScrollView 中有 recyclerview 将使 recyclerview 想要在渲染它们之前立即创建所有视图。这就是每次要显示数据时 UI 冻结的原因。
简单。只需设置 layoutManager autoMeasureEnable = true 或
覆盖 LayoutmanlayoutManager.setAutoMeasureEnabled(假)
我的设置包括两个使用 viewpager 设置的选项卡。每个选项卡都包含一个片段,其中包含一个显示歌曲列表的回收视图。
问题是,当将大量歌曲加载到 recyclerview 时,ui 会冻结一段时间。对于超过 2000 首歌曲的数量,系统会长时间冻结,然后抛出 OutOfMemory
错误。
注意:以简单的片段或activity将数据加载到recyclerview中,即使数据集非常大,也完全没有性能问题。
我该如何优化它?
如果只想显示歌曲的基本信息,可以使用List作为数据,SongInfo中包含名称、专辑、歌手...等,不会占用太多内存
于是我找到了问题的根源。 NestedScrollView 内的 Recyclerview。因为我要显示三个 RecyclerView,所以我不得不使用 NestedScrollView 来包装它们。但是从这个
简单。只需设置 layoutManager autoMeasureEnable = true 或 覆盖 LayoutmanlayoutManager.setAutoMeasureEnabled(假)