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;