1、避免创建过多的对象(如点击事件)
2、数据处理与视图绑定分离(onBindViewHolder 应该只是将数据set到视图中,而不应进行业务的处理)
3、数据优化(分页、DiffUtil<数据对比>局部刷新)
4、局部更新(知道哪些position的局部刷新)
notifyItemChanged(int position)
notifyItemInserted(int position)
notifyItemRemoved(int position)
notifyItemMoved(int fromPosition, int toPosition)
notifyItemRangeChanged(int positionStart, int itemCount)
notifyItemRangeInserted(int positionStart, int itemCount)
notifyItemRangeRemoved(int positionStart, int itemCount)
如果必须用 notifyDataSetChanged(),那么最好设置 mAdapter.setHasStableIds(true)
优化
https://zhuanlan.zhihu.com/p/49338922
RecyclerView性能优化 (优先看这个)
https://blog.csdn.net/smileiam/article/details/88396546
RecyclerView性能优化及高级使用
缓存机制
https://juejin.im/post/5a5d3d9b518825734216e1e8
https://juejin.im/post/5b79a0b851882542b13d204b
onbindview 不做计算等耗时任务
增加删除用局部更新 DiffUtil
闪烁处理
数据优化(分页 对拉取的远端数据进行缓存,提高二次加载速度)
RecyclerView缓存机制
加大RecyclerView的缓存
设置高度固定
RecyclerView数据预取
一些技巧
RecyclerView item局部刷新优化,只刷新item中的某个控件
https://www.jianshu.com/p/c5ca75d3a78c
RecyclerView 数据刷新的几种方式 局部刷新 notify MD
https://www.cnblogs.com/baiqiantao/p/6956425.html
处理刷新闪烁
调用notifyDataSetChange时,适配器不知道整个数据集中的那些内容以及存在,再重新匹配ViewHolder时会花生闪烁。
设置adapter.setHasStableIds(true),并重写getItemId()来给每个Item一个唯一的ID
RecyclerView 配合 DiffUtil,好用到飞起
https://juejin.im/post/5995ba616fb9a024747ed8e8
关于RecyclerView你知道的不知道的都在这了(上)
https://www.cnblogs.com/dasusu/p/9159904.html
这个赞一下!
RecyclerView 必知必会
https://zhuanlan.zhihu.com/p/24807254

网友评论