美文网首页Android
RecycleView原理

RecycleView原理

作者: 大佬的上半生 | 来源:发表于2019-10-24 17:22 被阅读0次
    RecyCleView是什么?

    ListView的局限

    • 只有纵向列表的一种布局
    • 没有支持动画API
    • 接口设计和系统不一致
    • 没有强制实现ViewHolder
      RecyClerView的优势
    • 默认支持Linear,grid,Staggered grid 三种布局
    • 友好的ItemAnimator动画API
    • 强制实现ViewHolder
    • 解耦的架构设置
    • 相比ListView更好的性能

    View Holder是什么?

    • View Holder和Item是什么关系?
      一一对应的关系
    • Holder View解决是什么问题?
      解决类的复用
    • VIew Holder 和ListView是什么关系?

    ListVie的缓存机制

    RecycleBin有两个缓存,一个是ActiveView活跃的View,ScrapView一个废弃移出屏幕的View,如果两个都没取到才创建一个View


    image.png

    Android滑动的时候会把每个View重新刷新一次,则用ActiveView缓存,ScrapView移出了屏幕,如果找到则重新绑定数据


    image.png

    RecycleView缓存原理

    1.RecycleView Scap对应ListView 的ActiveView
    Cache对应ListView的Scap

    image.png

    RecyClerView的性能优化策略

    • 在onBindViewHolder里设置点击监听?
      onBindViewHolder里设置点击监听器会导致重复创建对象
      在View-ViewHolder-View.OnClick对应设置
    • LinearLayoutManager.setLnitialPrefetchltemCount()
      应用场景
    • 用户滑动到横向滑动的item recyclerView的时候,由于需要创建更复杂的RecyClerView以及多个子View,可能会导致页面卡顿,
    • 由于RenderThread的存在,RecyclerView会进行prefetch
      LinearLayoutManager.setlnitialPrefetchitemCount(横向列表初次显示时可见的item个数)
    • RecyclerView.setHasFixedSize()


      image.png

    场景:如果Adapter的数据变换不会导致 recycleview的大小变化——>RecyclerView.setHasFixedSize(true)才会有效果

    多个RecyClerView公用RecycledViewPool

    • DiffUtil

    • 局部更新方法 notifyItemXXX()不适用所有情况

    • notifyNodaSetChange会导致整个布局重绘,重新绑定所有ViewHolder,而且会失去可能的动画效果

    • diffutil适用于动态更新最小刷新


      image.png
      image.png
    • getOldListSize()旧数集

    • getNewListSize()新数据集

    • areItemsTheSame()比较两个Item是不是用一个item

    • areContentsTheSame()同一个item的context是不是想用

    • getChangePayLoad()item变化了那些内容


      image.png

    在列表很大的时候异步计算diff

    • 使用Thread/Hander将diffResult发送到主线程
    • 使用RxJava将calculateDiff操作放到后台线程
    • 使用Google提供的AsyncListDiffer(Executor)/ListAdapter
    image.png

    为什么使用ItemDecoration可以绘制分割线

    image.png
    image.png

    ItemDecorAtion(装饰显示的Item)还可以做啥?

    某个item的高亮
    分类
    实现解耦


    image.png

    相关文章

      网友评论

        本文标题:RecycleView原理

        本文链接:https://www.haomeiwen.com/subject/ogirmctx.html