我使用到目前为止运行良好的RecyclerView。
有5个项目在屏幕上可见,我有7个ViewHolder,这是可以的。
如果我上下滚动,则ViewHolder的实例数是恒定的。
现在,我检查我的应用程序是否有内存消耗,并查找内存泄漏。
每次更改数据并通过以下方式通知适配器时,我都会注意:
notifyDataSetChanged();
每 2 次我都会获得更多ViewHolder。 viewType的数量是常数(仅更改数据)。
十个 notifyDataSetChanged将 20 ViewHolder添加到我的应用中并耗尽内存。
每个ViewHolder都拥有一个复杂的ViewModel,因此我会处理不必要的对象。
这是Android RecyclerView中的已知错误吗?
答案 0 :(得分:0)
您应该尝试计算差异并通知项目更改(最好使用有效负载),以避免重新创建ViewHolder
。您可以使用DiffUtil
类。
如果无法执行此操作,则需要增加RecyclerView.RecycledViewPool
的大小,默认情况下,每种类型仅容纳5个ViewHolder
:
// increases amount of recycled ViewHolders of type 0 (default) to 10
recyclerView.getRecycledViewPool().setMaxRecycledViews(0, 10);