RecyclerView 回收机制

主要方法

  • recycle
    • item 滑出屏幕时
  • findFromCache
    • item 出现在屏幕时

主要数据结构

  • mCachedViews
    • 最大个数为 2
    • FIFO
  • mRecyclerPool
    • SparseArray. key: itemType, value: ArrayList
    • value 的最大个数为 DEFAULT_MAX_SCRAP[5] ,可以修改
  • recycle -> putCacheView -> exceed limit? -> put recyclerPool -> exceed limit? -> discard

TIP

  • GridLayoutManager 的 spancout 如果大于 5 则需要调整 DEFAULT_MAX_SCRAP 的最大限制
  • 慎用 notifyDataSetChanged , 此方法会使所有的 ViewHolder 失效,itemCount - DEFAULT_MAX_SCRAP 个 item 会重走 onCreateViewHolder