android DiffUtils的一个缺点
我发现互联网上关于DiffUtil的所有信息都是关于如何使用DiffUtil的。 有人认为使用DiffUtil会导致大量内存消耗吗?android DiffUtils的一个缺点,android,android-recyclerview,Android,Android Recyclerview,我发现互联网上关于DiffUtil的所有信息都是关于如何使用DiffUtil的。 有人认为使用DiffUtil会导致大量内存消耗吗? 如果我有一个包含5000个对象(例如:post)的列表,那么我会滚动RecyclerView并再加载40个对象。这意味着如果使用DiffUtil,内存将保存两个列表(旧列表包含5000个对象,新列表包含5040个对象)。因此,在加载数据时,应用程序会大量消耗内存。 解决这个问题的方法是不要持有两份清单。显示如下: DiffUtil.DiffResult recyc
如果我有一个包含5000个对象(例如:post)的列表,那么我会滚动RecyclerView并再加载40个对象。这意味着如果使用DiffUtil,内存将保存两个列表(旧列表包含5000个对象,新列表包含5040个对象)。因此,在加载数据时,应用程序会大量消耗内存。 解决这个问题的方法是不要持有两份清单。显示如下:
DiffUtil.DiffResult recyclerViewDiff = DiffUtil.calculateDiff(new DiffUtil.Callback() {
@Override
public int getOldListSize() {
return oldelist.size();
}
@Override
public int getNewListSize() {
return oldlist.size() + increasedData.size();
}
@Override
public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
boolean isIncreaseDataPos = newItemPosition >= oldlist.size();
newItemPosition = !isIncreaseDataPos ? newItemPosition : newItemPosition - oldlist.size();
Object newItem = !isIncreaseDataPos ? oldlist.get(newItemPosition) : increaseData.get(newItemPosition);
return oldlist.get(oldItemPosition).equals(newItem);
}
@Override
public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
return ...;
}
});
但如果我更改列表中的项目(而不是添加更多数据),该怎么办?除了我自己使用notifyItemChanged(position)之外,有没有其他方法可以使用DiffUtil而不用保存两个列表来更新视图?但是如果你确切知道什么发生了变化,那么你需要什么呢
DiffUtil
?你的意思是我们有notifyItemChanged()
,notifyItemInserted
,notifyItemMoved
等等,那么我们不需要DiffUtil
?我们使用它只是因为它方便不因为我们不知道到底发生了什么变化。DiffUtil
只需查找更改、插入、移动和删除了哪些项目,如果您已经知道,那么您根本不需要DiffUtil
——文档中说:“DiffUtil是一个实用程序类,它可以计算两个列表之间的差异,并输出一个更新操作列表,将第一个列表转换为第二个列表。”但是如果您确切知道发生了什么变化,那么您需要什么呢、notifyItemInserted
、notifyItemMoved
等等,那么我们就不需要DiffUtil
?我们使用它只是因为它很方便,不是因为我们不知道到底发生了什么变化。DiffUtil
只需查找哪些项目被更改、插入、移动和删除,如果您已经知道,那么您就不需要e> DiffUtil
——文档中说:“DiffUtil是一个实用程序类,可以计算两个列表之间的差异,并输出一个更新操作列表,将第一个列表转换为第二个列表。”