日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RecyclerView学习(二)之缓存探索

發(fā)布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RecyclerView学习(二)之缓存探索 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

RecyclerView學習(二)之緩存探索

  • 探索緩存

學而不思則罔,思而不學則殆
相關文檔:
RecyclerView學習(一)之應用
RecyclerView學習(二)之緩存探索
RecyclerView學習(三)之緩存原理分析
我們都知道RecyclerView有緩存有復用,但是緩存的現(xiàn)象是什么呢?
今天我們就來探索一下緩存復用的現(xiàn)象,然后通過現(xiàn)象去研究本質

//RecyclerView 版本implementation 'androidx.recyclerview:recyclerview:1.1.0'

探索緩存

class StudyOneAdapter(list: List<Bean?>) : RecyclerView.Adapter<StudyOneAdapter.TestHolder>() {private val sTAG = "zy.StudyOneAdapter"private var mList: List<Bean?> = mutableListOf<Bean?>()private var mCreateNum = 0private val mHolderList = mutableSetOf<TestHolder>()init {mList = list}//創(chuàng)建Holderoverride fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TestHolder {Log.d(sTAG, "onCreateViewHolder")mCreateNum++...}//綁定數(shù)據(jù),如果有復用會直接返回復用的Holderoverride fun onBindViewHolder(holder: TestHolder, position: Int) {mHolderList.add(holder)Log.d(sTAG, "onBindViewHolder $mCreateNum ${mHolderList.size} ${holder.lastPosition} <-> $position $holder ")//綁定數(shù)據(jù)和記錄之前position在Holder中...}...

省略掉關鍵信息,在Adapter初始化添加兩個屬性變量,mCreateNum ,mHolderList

mCreateNum 在執(zhí)行onCreateViewHolder的時候會加1
mHolderList 是一個HashSet,在onBindViewHolder方法中把返回來的Holder加入到Set中,我們知道Set不會保存重復對象

itemView左上角表示當前position
右上角表示:lastPosition --> nowPosition (lastPositon默認為-1,還沒有復用)

2020-07-17 08:12:02.374 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onCreateViewHolder 2020-07-17 08:12:02.384 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=1 mHolderList.size=1 lastPosition=-1 --> nowPosition=0 TestHolder{51b6336 position=0 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:12:02.391 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onCreateViewHolder 2020-07-17 08:12:02.397 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=2 mHolderList.size=2 lastPosition=-1 --> nowPosition=1 TestHolder{799136c position=1 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:12:02.400 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onCreateViewHolder 2020-07-17 08:12:02.406 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=3 mHolderList.size=3 lastPosition=-1 --> nowPosition=2 TestHolder{14ca988 position=2 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:12:02.408 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onCreateViewHolder 2020-07-17 08:12:02.413 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=4 mHolderList.size=4 lastPosition=-1 --> nowPosition=3 TestHolder{8e63464 position=3 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:12:02.417 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onCreateViewHolder 2020-07-17 08:12:02.422 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=5 mHolderList.size=5 lastPosition=-1 --> nowPosition=4 TestHolder{231f000 position=4 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:12:02.425 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onCreateViewHolder 2020-07-17 08:12:02.430 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=6 mHolderList.size=6 lastPosition=-1 --> nowPosition=5 TestHolder{27ad85c position=5 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:12:02.433 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onCreateViewHolder 2020-07-17 08:12:02.439 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=7 mHolderList.size=7 lastPosition=-1 --> nowPosition=6 TestHolder{9e6a978 position=6 id=-1, oldPos=-1, pLpos:-1 no parent}
  • 初始log可以看出:onCreateViewHolder和onBindViewHolder 是成對出現(xiàn)的,這個時候還沒有可以復用的元素,幾乎是需要,就新建一個,給到onBindViewHolder 進行數(shù)據(jù)綁定和展示
  • lastPosition都是-1說明該Holder還沒有復用,屬于新建的Holder
  • 還有一個現(xiàn)象:不知道大家有沒有發(fā)現(xiàn),真?zhèn)€屏幕展示個ItemView的個數(shù)是6+1(只有一點點),而Holder生成了7個,說明像這種沒有展示完全的ItemView也是已經創(chuàng)建
  • 再測試一下滑動過程中的log表現(xiàn)

    2020-07-17 08:27:08.265 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onCreateViewHolder 2020-07-17 08:27:08.271 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=11 mHolderList.size=11 lastPosition=-1 --> nowPosition=10 TestHolder{f43dac position=10 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.281 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=11 mHolderList.size=11 lastPosition=0 --> nowPosition=11 TestHolder{51b6336 position=11 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.289 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=11 mHolderList.size=11 lastPosition=1 --> nowPosition=12 TestHolder{799136c position=12 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.305 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=11 mHolderList.size=11 lastPosition=2 --> nowPosition=13 TestHolder{14ca988 position=13 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.311 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=11 mHolderList.size=11 lastPosition=3 --> nowPosition=14 TestHolder{8e63464 position=14 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.323 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onCreateViewHolder 2020-07-17 08:27:08.329 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=12 mHolderList.size=12 lastPosition=-1 --> nowPosition=15 TestHolder{bf047c8 position=15 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.342 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=12 mHolderList.size=12 lastPosition=5 --> nowPosition=16 TestHolder{27ad85c position=16 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.356 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=12 mHolderList.size=12 lastPosition=6 --> nowPosition=17 TestHolder{9e6a978 position=17 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.372 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=12 mHolderList.size=12 lastPosition=7 --> nowPosition=18 TestHolder{51bd34a position=18 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.388 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=12 mHolderList.size=12 lastPosition=8 --> nowPosition=19 TestHolder{cbcbc87 position=19 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.405 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=12 mHolderList.size=12 lastPosition=9 --> nowPosition=20 TestHolder{bc8ec50 position=20 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.424 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=12 mHolderList.size=12 lastPosition=10 --> nowPosition=21 TestHolder{f43dac position=21 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.439 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=12 mHolderList.size=12 lastPosition=11 --> nowPosition=22 TestHolder{51b6336 position=22 id=-1, oldPos=-1, pLpos:-1 no parent}

    分析一下LOG給我們提供的信息

  • 當我們滑動到一定的時候,就不再調用onCreateViewHolder
  • mCreateNum和mHolderList.size也不再增加,保持一個數(shù)值不變,且他們相等
  • lastPosition的值不在是-1
  • mCreateNum=12 mHolderList.size=12 lastPosition=8 --> nowPosition=19 比如這一條log,可以看出復用之前展示8,現(xiàn)在展示19
  • 那就有問題:

  • 復用的邏輯是什么?比如,lastPosition=8 --> nowPosition=19
  • 緩存的個數(shù)是多少? 本次實驗是總共是12,全屏展示的是6+1,有什么公式嗎?如y=2*x -2?
  • 當然以上都是猜測,后續(xù)我們就帶著問題來分析復用邏輯

    總結

    以上是生活随笔為你收集整理的RecyclerView学习(二)之缓存探索的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。