1.RecycledPool的重用
场景以及使用:
多个RecyclerView出现,并且他们的item布局结构一致,这时候可以进行重用。
在进行RecyclerView的初始化设置时候进行RecycledPool的设置。
//每个单元的视频列表的RecycledPool
private var mRecycledViewPool: RecyclerView.RecycledViewPool? = null
unitVideoListContentRv.run {
layoutManager = GridLayoutManager(itemView.context, 3)
if (mRecycledViewPool != null) {
setRecycledViewPool(mRecycledViewPool)
} else {
mRecycledViewPool = recycledViewPool
}
...........
}
重用前后的对比:
本次展示的是长列表中的item嵌套列表,进行多item的加载然后上下滑动,同时检测内存的开销占用。

列表的规模是13个item,每个item中有4个视频item,规模不算特别大。
重用RecycledPool之前:

数据加载完毕之后,最后上下滑动的内存趋于平稳在48.4m
重用RecycledPool之后:

数据加载完毕之后,最后上下滑动的内存趋于平稳在40m。
对比总结:
其实很明显可以看到内存开销减少,而内存开销减少能提升列表的流畅度,效果是显而易见的。这次的列表数据规模还不算大,后续如果规模增加到很大,那么对比将会更加明显。
2.setHasFixedSize(boolean)的使用
方法的名字就表明了,设置是否有固定的尺寸,就是说RecyclerView是否有固定的尺寸,如果设置了true。那么会在以下的情景用到:
onMeasure---测量
如果设置了true,那么RecyclerView的mHasFixedSize变量为true。
@Override
protected void onMeasure(int widthSpec, int heightSpec) {
if (mLayout == null) {
defaultOnMeasure(widthSpec, heightSpec);
return;

本文详细介绍了RecyclerView的多个优化点,包括RecycledPool的重用以减少内存开销,setHasFixedSize(true)提升测量性能,setHasStableIds(true)实现更高效的列表更新,ViewCacheExtension作为二级缓存加速ViewHolder获取,预加载功能的利用,以及不同更新列表方式的比较。此外,还提到了防止过度绘制来优化性能的重要性。
最低0.47元/天 解锁文章
746

被折叠的 条评论
为什么被折叠?



