zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    SIFT,SURF,ORB,FAST,BRISK 特征提取算法比较
    OpenCV 4.2.0 编译成功日志(Mac)
    Ceres Solver Bibliography
    Linux下重启就需要重新激活eth0的解决办法(ifup eth0)
    PS(光影魔术手)
    软件项目开发各阶段文档模板(参考)
    敏捷、瀑布开发模式
    QA
    QC
    会计人必知的实务基础知识
  • 原文地址:https://www.cnblogs.com/FCY-LearningNotes/p/14799802.html
Copyright © 2011-2022 走看看