我读了很多关于 RecyclerView 优化的内容 已经有一段时间了,学到了很多新概念。目前还不清楚的一件事是我们是否可以在 RecyclerView 中同时使用稳定的 id 和 DiffUtils。这种方法有可能的优点/缺点吗?根据我所读到的内容,我认为单独使用 DiffUtils 将带来重用 viewHolder 和漂亮动画的所有可能的好处(如果我错了,请纠正我)。详细的比较会很有帮助。
最佳答案
长话短说,DiffUtill 完全取代了 stableIds 方法。
StableIds 是每个人都从 ListView 迁移到 RecyclerView 时代的遗留方法。它与 ItemAnimator 一起提供了一种简单的方法来获得开箱即用的简单预测动画。预测意味着当您刚刚调用notifyDataSetChanges时,RV可以自行推断出哪些项目被添加/删除或移动,而无需担心其他回调。
一旦 DiffUtil 出现,RV 就不需要推断出这一点,因为 DiffUtils 会准确地告诉 RV 哪些项目正在被移动/添加/删除。
我在非常恶劣的条件下使用 RV,有数十种项目类型,每秒有多次数据更新,并且花了十几个小时调试 RV 和动画内部结构,但没有注意到其报废/去报废/1-尝试在 DiffUtil 之上添加 stableIds 时的 2-3 步布局行为。
这里有一篇关于 2015 年 DiffUtill 之前的动画如何工作的大篇文章:
https://www.birbit.com/recyclerview-animations-part-1-how-animations-work/
https://www.birbit.com/recyclerview-animations-part-2-behind-the-scenes/
如果您对 RV 内部结构感兴趣,还可以了解更多信息:
https://android.jlelse.eu/anatomy-of-recyclerview-part-1-a-search-for-a-viewholder-404ba3453714
关于android - 回收者 View 中的 DiffUtils 与稳定 Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54089162/