专栏名称: jokermonn
Android dev-er
目录
相关文章推荐
复利大王  ·  J小姐,死于话多 ·  9 小时前  
鸿洋  ·  腾讯 ovCompose ... ·  昨天  
复利大王  ·  某公募研究员ED? ·  昨天  
复利大王  ·  国产美女宁宁 ·  2 天前  
复利大王  ·  三名日本女技师来北京打工被抓 ·  2 天前  
51好读  ›  专栏  ›  jokermonn

手摸手第二弹,可视化 RecyclerView 缓存机制

jokermonn  · 掘金  · android  · 2018-01-15 23:48

正文

请到「今天看啥」查看全文


一缓

手摸手打开 app:

这里写图片描述

RecyclerView 中的一缓 mAttachedScrap 与 ListView 中的一缓 mActiveViews 功能是基本相似的,为了屏幕内 item 快速复用而存在(RecyclerView/ListView 具有两次 onLayout() 过程,第二次 onLayout() 中直接使用第一次 onLayout() 缓存的 View,而不必再创建)。

二缓

实际上,二缓 mCachedViews 加上四缓 RecyclerViewPool 合在一起与 ListView 的二缓 mScrapedViews 意义相同,为了即将给即将入屏的 item 复用而存在。下面来细谈下二缓:

  • ArrayList 类型
  • 默认 size 为 2
  • size 可变
  • 复用算法是从尾部倒序匹配 ViewHolder position 与传入的 position 是否相等,匹配成功则返回
  • 为了优化上一步,下一个可能出现的 item 将会被置于尾部

二缓是通过 position 来匹配相应的 ViewHolder 的,这里的 position 指的是 RecyclerView 预测的、可能进入屏幕的 item 的 position,它是由当前屏幕滑动方向和可见的 item 位置来共同决定的。例如:屏幕向下滑动,那么可能进入屏幕的 item 的 position 就是当前可见第一个 item 的 position - 1;屏幕向上滑动,那么可能进入屏幕的 item 的 position 就是当前可见的最后一个 item 的 position + 1。这样说起来可能有些模糊,举个例子:

这里写图片描述







请到「今天看啥」查看全文