onMeasure:
注释一:如果RV设置match_parent或者精确数值,调用mLayout来测量子view大小
注释二:如果设置wrap-content,使用layoutManager来测量
onLayout:
1、如果在测量阶段没有用dispathLayoutStep2进行测量的话,在此阶段使用它再执行一遍
本质上是调用layoutManager的onLayoutChildren,具体看layoutManager具体实现
layoutChunk方法每执行一次就添加一个子view到RV中
1、从缓存取出view添加到RV
2、测量被添加的view宽高
3、根据margin确认显示位置
onDraw:
缓存复用:
一级:mAttachedSrap、mChangedScrap:缓存屏幕内的ViewHolder?在数据更新(例:下拉刷新,notify)的时候直接将ViewHolder中的数据进行更新即可。
二级:mCachedViews:先入先出,缓存两个屏外ViewHolder。
三级:ViewCacheExtension:给开发人员自己添加缓存逻辑。
四级:RecycledViewPool:根据type缓存ViewHolder,每类最多5个,当mCachedViews缓存满,先放到RecycledViewPool中,并将数据清理,拿出时重新执行onBindViewHolder(等于LV的convertView方法)