RecyclerView缓存初识

RecyclerView

  1. what is recyclerview ?

    a flexible view for providing a limited window into a large data set

Recyclerview:

  1. Layout Manager
  2. Item Animator
  3. Adapter

what is viewHolder ?

 public static class MyHolder extends RecyclerView.ViewHolder {
        // 缓存view
        protected SparseArray<View> views;
        protected View mView;
        private ViewDataBinding binding;
 }

我们可以看到viewholder就是管理存储一个itemView中所有view的一个管理者。

recyclerview的缓存

image-20210429132154711

image-20210429132331591

scrap:一级缓存,其中放置着当前屏幕还在显示的itemview的holder,因为android屏幕每16ms刷新一次,会导致所有数据刷新,就直接复用scrap中的信息避免重新创建view以及bind view。通过position来达到复用的目的。

cache:二级缓存,其中存放着刚刚画出屏幕的itemview的holder,该缓存默认缓存大小为2,目的是当用户方向滑动的时候可以直接复用。

viewCacheExtension:三级缓存,留给用户自定义使用的缓存池

RecycledViewPool:四级缓存,一个新的itemview,如果在前三个缓存都不符合条件就从这里根据itemViewType来选择复用holder,不够这里边的holder是含有脏数据的,不需要调用oncreateView(),但是会重新绑定数据调用onBindView()。

RecyclerView的性能优化

点击事件的缓存,如果点击事件是放在onBindView()中进行设置的每次绑定数据的时候都要listener对象的创建与设置,这是没有必要的,而且在用户快速滑动的时候,资源的消耗就会特别明显。我们可以在oncreateView()中设置点击事件或者将点击事件放置在viewHolder中,在缓存viewHolder的时候同时将监听对象缓存起来。

image-20210429135520026

image-20210429135448820

recyclerView.setHasFixedSize()

image-20210429135828517

image-20210429140023133

原文地址:https://www.cnblogs.com/FCY-LearningNotes/p/14799802.html