在notifyDataSetChanged()之后调用RecyclerView.Adapter onCreateViewHolder()

时间:2019-06-21 12:51:13

标签: android-recyclerview recycler-adapter

我使用到目前为止运行良好的RecyclerView。

有5个项目在屏幕上可见,我有7个ViewHolder,这是可以的。

如果我上下滚动,则ViewHolder的实例数是恒定的。

现在,我检查我的应用程序是否有内存消耗,并查找内存泄漏。

每次更改数据并通过以下方式通知适配器时,我都会注意:

notifyDataSetChanged();

2 次我都会获得更多ViewHolder。 viewType的数量是常数(仅更改数据)。

十个 notifyDataSetChanged将 20 ViewHolder添加到我的应用中并耗尽内存。

每个ViewHolder都拥有一个复杂的ViewModel,因此我会处理不必要的对象。

这是Android RecyclerView中的已知错误吗?

1 个答案:

答案 0 :(得分:0)

您应该尝试计算差异并通知项目更改(最好使用有效负载),以避免重新创建ViewHolder。您可以使用DiffUtil类。

如果无法执行此操作,则需要增加RecyclerView.RecycledViewPool的大小,默认情况下,每种类型仅容纳5个ViewHolder

// increases amount of recycled ViewHolders of type 0 (default) to 10
recyclerView.getRecycledViewPool().setMaxRecycledViews(0, 10);