我发现互联网上关于DiffUtil的所有信息都是关于如何使用DiffUtil的。 是否有人认为使用DiffUtil会导致大量内存消耗? 如果我有一个包含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 ...;
}
});
但是,如果我更改列表中的项目(不添加更多数据)怎么办?有没有办法使用DiffUtil而不保留两个列表来更新视图,除非我自己使用notifyItemChanged(position)?