一个android DiffUtils的缺点

时间:2017-08-09 04:06:10

标签: android android-recyclerview

我发现互联网上关于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)?

0 个答案:

没有答案