• 结构不同
      1. ListView的结构是 View 与 Adapter
      2. RecyclerView 除 View 和 Adapter 外还有 LayoutManager(负责测量和摆放,onMeasure,onLayout)
    • 复用机制不同
      1. ListView (复用)的是 View(View的数组)
      2. RecyclerView (复用)的是 ViewHolder (ViewHolder的集合)
      3. 实现多 Item 方式上,ListView 内部是个 View 数组,所以要求 itemType必须是有序的。RecyclerView 内部是个List,随便填
      4. RecyclerView 内部还有一个缓存池(RecyclerViewPool)
    • 缓存机制不同
      1. ListView 缓存是父类AbsListView里的一个RecyclerBin管理,两级缓存
      2. RecyclerView 缓存是一个Recycler类,缓存的是ViewHolder
    • RecyclerView 图解运行机制
      image.png
    • 为什么会有RecyclerView?
      1. 因为ListView实现动画比较困难。不能局部刷新(尤其在做动画情况下 )
      2. ListView不能局部刷新,性能问题
    • ListView的缓存机制
      1. 二级缓存是指:ReyclerBin里的成员变量:mActiveViews的View数组和mScrapView的List数组
      image.png
    • RecyclerView的缓存机制
      1. 内部类里的Recycler类
      2. mCachedViews主要优化滑动时候的性能,默认两个,有对应的set方法设置数量
      image.png
      image.png
      2. mCachedViews超过两个(默认两个)后,会存进Pool里
      image.png
      可以支持设置同一个回收池,可以增加pool里的内部数量(默认五个)。当调用全刷新方法的时候pool里的List默认是五个,所以不够用了,建议使用局部刷新。常规情况下:notifyDataSetChanged()方法会刷新全部 Item 。但是这种业务实际几乎是没有的,往往刷新的是几个或者一个。