RV与LV

onMeasure:RV与LV_第1张图片
注释一:如果RV设置match_parent或者精确数值,调用mLayout来测量子view大小
注释二:如果设置wrap-content,使用layoutManager来测量

onLayout:
1、如果在测量阶段没有用dispathLayoutStep2进行测量的话,在此阶段使用它再执行一遍
RV与LV_第2张图片
本质上是调用layoutManager的onLayoutChildren,具体看layoutManager具体实现
RV与LV_第3张图片
layoutChunk方法每执行一次就添加一个子view到RV中
1、从缓存取出view添加到RV
2、测量被添加的view宽高
3、根据margin确认显示位置
RV与LV_第4张图片

onDraw:RV与LV_第5张图片

 

缓存复用:

一级:mAttachedSrap、mChangedScrap:缓存屏幕内的ViewHolder?在数据更新(例:下拉刷新,notify)的时候直接将ViewHolder中的数据进行更新即可。
二级:mCachedViews:先入先出,缓存两个屏外ViewHolder。
三级:ViewCacheExtension:给开发人员自己添加缓存逻辑。
四级:RecycledViewPool:根据type缓存ViewHolder,每类最多5个,当mCachedViews缓存满,先放到RecycledViewPool中,并将数据清理,拿出时重新执行onBindViewHolder(等于LV的convertView方法)

 

你可能感兴趣的:(笔记,Android)