背景
偶然发现小红书一个名为CommonRvAdapter通用的Adapter基类有一定的优化空间,主要体现在list在add、remove操作时没有正确调用notifyItemInserted、notifyItemRemoved的问题。
继承此类的地方多达75处,所以觉得有必要提出来说一下。
小红书源码
如上图,在addItem和remove时直接调用的是notifyDataSetChanged(),这将导致所有可见item的刷新,对性能有一定的影响。我们使用RecyclerView替换ListView的一个重要的原因就是RecyclerView提供了更多细分的notifyxxx()方法用于更新单条数据,如果直接使用notifyDataSetChanged()那就失去了使用RecyclerView的意义了。
so,在此建议小红书在此基类做更细致的区分,以提高速度。
相关文档
更多notifyxxx()方法的用法网上将的很详细,我就不赘述,参照:
RecyclerView更新数据方法 notifyItemChanged()、notifyItemInsert()、notifyIteRemoved()