Android 在viewpager的recyclerview中加载大数据时出现性能问题

Android 在viewpager的recyclerview中加载大数据时出现性能问题,android,performance,android-fragments,android-recyclerview,android-viewpager,Android,Performance,Android Fragments,Android Recyclerview,Android Viewpager,“我的设置”包含两个选项卡“使用viewpager设置”。每个选项卡都包含一个片段,其中包含一个显示歌曲列表的recyclerview。 问题是,当将大量歌曲加载到recyclerview时,ui会冻结一段时间。对于2000首以上的歌曲,系统会长时间冻结,然后抛出OutOfMemory错误 注意:即使数据集非常大,在一个简单的片段或活动中将数据加载到recyclerview中也没有任何性能问题 我如何优化它 如果您只想显示歌曲的基本信息,您可以使用列表作为数据,在SongInfo中包含姓名、专辑

“我的设置”包含两个选项卡“使用viewpager设置”。每个选项卡都包含一个片段,其中包含一个显示歌曲列表的recyclerview。 问题是,当将大量歌曲加载到recyclerview时,ui会冻结一段时间。对于2000首以上的歌曲,系统会长时间冻结,然后抛出
OutOfMemory
错误

注意:即使数据集非常大,在一个简单的片段或活动中将数据加载到recyclerview中也没有任何性能问题


我如何优化它

如果您只想显示歌曲的基本信息,您可以使用列表作为数据,在SongInfo中包含姓名、专辑、歌手等,它不会占用太多内存,因此我找到了问题的根源。NestedScrollView中的Recyclerview。因为我需要显示三个RecyclerViews,所以我必须使用NestedScrollView来包装它们。但是从这一点上,我了解到在nestedScrollView中使用recyclerview将使recyclerview在渲染之前希望一次创建所有视图。这就是为什么每次显示数据时用户界面都会冻结的原因。

简单。只需将layoutManager automeasurenable设置为true或
覆盖LayoutmanlayoutManager.setAutoMeasureEnabled(false)

使用谷歌的支持library@pskink我使用它指定将项目列表作为列表发送。所以分页库在这里不起作用。除非我必须单独获取mediaItems,而不是通过MediaBrowserCompat OnSubscriptionCallback。我还没弄明白。那张列表的大小是多少?或者它有多少项?大小取决于手机中歌曲的数量。对于一部有100首以上歌曲的手机,这个问题会变得更加明显。我曾尝试使用一个简单的歌曲对象来显示基本的歌曲信息,但仍然遇到同样的问题。通常我使用的列表是从onLoadChildren of返回的,但在呈现项目时,即使在转换为更简单的对象之后,我仍然会遇到同样的问题。