Android 進(jìn)階學(xué)習(xí)(三十) RecyclerView 4級(jí)緩存的作用

想必大家對(duì)RecyclerView的4級(jí)緩存肯定都有所了解,那么RecyclerView為什么要是用4級(jí)緩存,每一級(jí)緩存在RecyclerView中都扮演了什么角色呢?

一級(jí)緩存 --> 減少綁定數(shù)據(jù)次數(shù)

RecyclerView 在滑動(dòng)過(guò)程中為了實(shí)現(xiàn)平滑的移動(dòng),每次移動(dòng)的距離都是10以下的像素,但是不管移動(dòng)了多少,只要快速的滑動(dòng),就要頻繁的遍歷數(shù)據(jù),但是如果數(shù)據(jù)遍歷完數(shù)據(jù)再重新bindData 就是一個(gè)非常要命的操作,一級(jí)緩存attachList 的作用就是在滑動(dòng)過(guò)程保存屏幕中有效的item 放入其中,那么在滑動(dòng)時(shí)從一級(jí)緩存中獲取的所有item的數(shù)據(jù)都是有效的,大大的保障了RecyclerView 滑動(dòng)過(guò)程中的平滑性

二級(jí)緩存 --> 減少剛剛從相同部分滑出屏幕,再劃入屏幕的item bindDate的次數(shù)

這個(gè)過(guò)程可以理解為,RecyclerView 向上滑動(dòng)時(shí),其中一個(gè)item 剛剛從一級(jí)緩存中被移除,此時(shí)RecyclerView 向下滑動(dòng)讓剛剛從一級(jí)緩存刪除的item 重新顯示在屏幕上,此時(shí)只需要遍歷二級(jí)緩存cacheList, 這個(gè)list大小只有2個(gè),而且遍歷他的時(shí)機(jī)是有item需要被替換的情況下,所以遍歷二級(jí)緩存的所消耗的代價(jià)還是相當(dāng)可以的

我們可以一起分析一下一級(jí)緩存和二級(jí)緩存
我們先假設(shè)一個(gè)item的高度為100 而每次滑動(dòng)的高度為10
在RecyclerView 向上快速滑動(dòng)的過(guò)程就是第一次滑動(dòng)10 將所有item 緩存到一級(jí)緩存 attachlist 中,反饋滑動(dòng)距離時(shí),由于沒(méi)有item 出現(xiàn)替換或者消失的情況,不會(huì)遍歷二級(jí)緩存,直接完整遍歷一級(jí)緩存即可完成本次滑動(dòng),直到 滑動(dòng)距離達(dá)到100,此時(shí)出現(xiàn)交替的情況下,假設(shè)二級(jí)緩存中存在數(shù)據(jù),那么則會(huì)遍歷二級(jí)緩存看看其中的數(shù)據(jù)是否和我們將要顯示的數(shù)據(jù)匹配,如果匹配,則不需要重新綁定數(shù)據(jù),如果不匹配則需要重新綁定數(shù)據(jù)

三級(jí)緩存 -->自定義緩存

第三級(jí)緩存是用來(lái)給復(fù)雜的操作用來(lái)做不同的緩存策略的,具體什么情況下能使用到這種緩存我也清楚,

四級(jí)緩存 --> 與listView 的viewholder 的用法一致,減少View inflate 的次數(shù)

其實(shí)在RecyclerView 中的第四級(jí)緩存從功能上整體上和ListView 的緩存是一致的,就是為了緩存View ,防止每次加載新的item再重新inflate 控件,他比ListView 強(qiáng)大之處就在可以讓多個(gè)RecyclerView 公用一個(gè)4級(jí)緩存池,來(lái)達(dá)到加速顯示的效果,我們還是以上一篇文章的圖片為例


image.png

讓所有的item公用一個(gè)緩存池必然會(huì)增加滑動(dòng)時(shí)的流暢度

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末力穗,一起剝皮案震驚了整個(gè)濱河市血崭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌丽涩,老刑警劉巖桐腌,帶你破解...
    沈念sama閱讀 212,686評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拄显,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡案站,警方通過(guò)查閱死者的電腦和手機(jī)躬审,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蟆盐,“玉大人承边,你說(shuō)我怎么就攤上這事∈遥” “怎么了博助?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,160評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)痹愚。 經(jīng)常有香客問(wèn)我富岳,道長(zhǎng)蛔糯,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,736評(píng)論 1 284
  • 正文 為了忘掉前任窖式,我火速辦了婚禮蚁飒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘萝喘。我一直安慰自己淮逻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布阁簸。 她就那樣靜靜地躺著爬早,像睡著了一般。 火紅的嫁衣襯著肌膚如雪强窖。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,043評(píng)論 1 291
  • 那天削祈,我揣著相機(jī)與錄音翅溺,去河邊找鬼。 笑死髓抑,一個(gè)胖子當(dāng)著我的面吹牛咙崎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吨拍,決...
    沈念sama閱讀 39,129評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼褪猛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了羹饰?” 一聲冷哼從身側(cè)響起伊滋,我...
    開(kāi)封第一講書(shū)人閱讀 37,872評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎队秩,沒(méi)想到半個(gè)月后笑旺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,318評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡馍资,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評(píng)論 2 327
  • 正文 我和宋清朗相戀三年筒主,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸟蟹。...
    茶點(diǎn)故事閱讀 38,777評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乌妙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出建钥,到底是詐尸還是另有隱情藤韵,我是刑警寧澤,帶...
    沈念sama閱讀 34,470評(píng)論 4 333
  • 正文 年R本政府宣布熊经,位于F島的核電站荠察,受9級(jí)特大地震影響置蜀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悉盆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評(píng)論 3 317
  • 文/蒙蒙 一盯荤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧焕盟,春花似錦秋秤、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,861評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至来农,卻和暖如春鞋真,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沃于。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,095評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工涩咖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人繁莹。 一個(gè)月前我還...
    沈念sama閱讀 46,589評(píng)論 2 362
  • 正文 我出身青樓檩互,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親咨演。 傳聞我的和親對(duì)象是個(gè)殘疾皇子闸昨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容