Android RecyclerView中显示大型数据集的策略

Android RecyclerView中显示大型数据集的策略,android,performance,android-recyclerview,memory-efficient,Android,Performance,Android Recyclerview,Memory Efficient,RecyclerView实现通常采用以下方法: 创建保存数据集或其引用的RecyclerAdapter,例如列表 将适配器和LayoutManager连接到RecyclerView 在适配器上调用setItems(或等效项)以刷新内容 可以选择添加分页+无休止的滚动,以便一次能够逐渐加载更多内容 它利用RecyclerView和ViewHolder的强大功能高效地显示巨大的数据集。然而,它并没有解决将数据集存储在内存中的问题,这正是我的问题所在 假设我的数据集中有100万个项目,并且实现了分

RecyclerView实现通常采用以下方法:

  • 创建保存数据集或其引用的RecyclerAdapter,例如列表
  • 将适配器和LayoutManager连接到RecyclerView
  • 在适配器上调用setItems(或等效项)以刷新内容
  • 可以选择添加分页+无休止的滚动,以便一次能够逐渐加载更多内容
它利用RecyclerView和ViewHolder的强大功能高效地显示巨大的数据集。然而,它并没有解决将数据集存储在内存中的问题,这正是我的问题所在

假设我的数据集中有100万个项目,并且实现了分页+无限滚动。如果我在最后一页,为了使RecyclerView能够显示项目,我们必须将所有100万个项目存储在适配器的列表中,并将该列表与相关的RecyclerAdapter方法一起使用

有没有更有效的方法?我最初的想法是采用某种基于滑动窗口的方法,在内存中保留固定数量的页面,并采用双向无止境滚动实现,在用户滚动时,下一页/上一页窗口会随着滚动“视口”的变化而更新。不确定这是否会影响滚动性能…

请考虑

它的工作原理是将数据作为页面加载,而不仅仅是将所有内容加载到内存中。当滚动时,它将加载您告诉它的相应页面,这样它就不必将所有内容都保存在内存中,您可以输入相应的键,以便在何处检索数据,分页库将为您处理这些内容

它支持从数据库读取数据,也支持从网络或两者的混合体读取数据,因此无论您需要什么,都可以使用它



我认为值得一提的是,如果您已经有了自己的实现,您还可以尝试模仿这种行为。如果您有办法知道用户在显示的数据中已达到某个阈值,您可以自己加载下一页/上一页,然后自己管理内存中的数据量。向上/向下一页可能就足够了,您还可以清除自己的本地内存

Ha!我不知道那个图书馆,好像它就是为了这样做的。甚至支持预加载视图外页面。请稍等片刻,然后将答案标记为正确,以查看其他建议。谢谢我不太确定库的状态是什么,但我已经用过两次了,第一次有点混乱,但是第3版(目前是alpha版本)简单多了,所以也许可以尝试一下,不管是哪种方式都很有价值,很高兴这可以帮上忙确实值得一试,从我的记忆来看,文档中的设置看起来很简单“标准”分页库有点复杂,需要创建3种不同类型的数据源工厂(或类似的)我发现它有点让人困惑,但是第3页消除了这一点,只是让你自己处理它,但这完全是我自己的观点,我可以确认这个库确实工作得很好,尽管我以前见过并使用过它