RecycleView可優(yōu)化的點

1.避免在onBind方法中創(chuàng)建對象

因為onBind方法的調(diào)用時機是View滑到屏幕內(nèi)可顯示時這個方法就會調(diào)用此方法坠韩,避免在這個方法內(nèi)設(shè)置點擊事件等創(chuàng)建對象的操作。

2.避免在onBind方法中做耗時操作,可采用邏輯前移或變成私有變量碱璃,比如:
  • 1.TextView.setText(Html.fromHtml(str);
  • 2.計算UI的寬高比杨凑,margin,padding晴楔,每次都用DensityUtils.dp2px()轉(zhuǎn)換顿苇。
  • 3.每次都new一些可以復(fù)用都對象:adapter,viewparam
3.通過RecyclerPool給RecycleView設(shè)置緩存池實現(xiàn)多個RecycleView復(fù)用。

多用于RecycleView嵌套RecycleView税弃,減少對ViewHolder的創(chuàng)建

//緩存池
private RecyclerView.RecycledViewPool childPool;
public XXAdapter(){
    childPool = new RecyclerView.RecycledViewPool();
}
private class RcyViewHolder extends RecyclerView.ViewHolder {
        private SRecyclerView sRcy;

        public RcyViewHolder(View itemView) {
            super(itemView);
            sRcy = itemView.findViewById(R.id.rcy_child);
            LinearLayoutManager manager = new LinearLayoutManager(mContext);
            //1.設(shè)置回收
            manager.setRecycleChildrenOnDetach(true);
            manager.setOrientation(LinearLayoutManager.HORIZONTAL);
            sRcy.setLayoutManager(manager);
            //2.設(shè)置緩存Pool
            sRcy.setRecycledViewPool(childPool);
        }
    }
4.需要大量加載圖片的列表或是復(fù)雜布局纪岁,重寫onScroll事件,滑動停止后再加載圖片或布局或采用「骨架屏」框架方案则果。
5.靈活應(yīng)用刷新機制幔翰,減少沒必要的綁定方法的調(diào)用。

notifydatasetchange全部刷新西壮,notifyItemRemoved(0)局部刪除遗增, notifyItemRangeInserted(start,end)等刷新機制的選擇。

6.減少層級繪制
7.設(shè)置setItemViewCacheSize緩存大小
recyclerView.setItemViewCacheSize(20);
recyclerView.setDrawingCacheEnabled(true);
recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);

其實setItemViewCacheSize設(shè)置的是CacheViews的大小

1.CacheViews中的緩存只能position相同才能復(fù)用款青,并且不會重新Bind.
2.CacheViews滿了后會移除到RecyclerPool中做修,并重置ViewHolder.
3.RecyclerPool中的緩存復(fù)用需要重新Bind.

所以我們可以適當(dāng)?shù)耐ㄟ^調(diào)用setItemViewCacheSize方法,來增加CacheViews的大新詹荨(默認(rèn)是2)饰及,來防止小范圍的滑動導(dǎo)致的重復(fù)Bind而導(dǎo)致的卡頓。典型的拿空間還時間康震,所以要考慮內(nèi)存問題燎含,根據(jù)自己的應(yīng)用實際情況設(shè)置大小

8.recyclerView.setHasFixedSize(true)避免重新計算item高度。

當(dāng)知道Adapter內(nèi)Item的改變不會影響RecyclerView寬高的時候腿短,可以設(shè)置為true讓RecyclerView避免重新計算大小屏箍。

  • onItemRangeChanged()
  • onItemRangeInserted()
  • onItemRangeRemoved()
  • onItemRangeMoved()
    當(dāng)調(diào)用Adapter的增刪改插方法,最后就會根據(jù)mHasFixedSize這個值來判斷需要不需要requestLayout()橘忱;所以這4個方法不會重新繪制赴魁。
    當(dāng)執(zhí)行notifyDataSetChanged()時,最后調(diào)用了onChanged鹦付,調(diào)用了requestLayout()尚粘,會去重新測量寬高,所以我們設(shè)置為true時敲长,大小還是重新計算郎嫁。
9.RecyclerView的新機制:預(yù)缺獭(Prefetch)

需要升級Recycle版本到25以上的版本才能使用recyclerview prefetch功能。
參考文章:RecyclerView的新機制:預(yù)仍箢酢(Prefetch)
RecyclerView Prefetch功能探究

10.合理的復(fù)用onBind方法尚辑,對性能進(jìn)行檢測,觀察比較復(fù)用后對UI卡頓的影響盔腔。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杠茬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子弛随,更是在濱河造成了極大的恐慌瓢喉,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舀透,死亡現(xiàn)場離奇詭異栓票,居然都是意外死亡,警方通過查閱死者的電腦和手機愕够,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門走贪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惑芭,你說我怎么就攤上這事坠狡。” “怎么了遂跟?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵逃沿,是天一觀的道長。 經(jīng)常有香客問我幻锁,道長感挥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任越败,我火速辦了婚禮,結(jié)果婚禮上硼瓣,老公的妹妹穿的比我還像新娘究飞。我一直安慰自己,他們只是感情好堂鲤,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布亿傅。 她就那樣靜靜地躺著,像睡著了一般瘟栖。 火紅的嫁衣襯著肌膚如雪葵擎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天半哟,我揣著相機與錄音酬滤,去河邊找鬼签餐。 笑死,一個胖子當(dāng)著我的面吹牛盯串,可吹牛的內(nèi)容都是我干的氯檐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼体捏,長吁一口氣:“原來是場噩夢啊……” “哼冠摄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起几缭,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤河泳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后年栓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拆挥,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年韵洋,在試婚紗的時候發(fā)現(xiàn)自己被綠了竿刁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡搪缨,死狀恐怖食拜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情副编,我是刑警寧澤负甸,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站痹届,受9級特大地震影響呻待,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜队腐,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一蚕捉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柴淘,春花似錦迫淹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至第股,卻和暖如春应民,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工诲锹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留繁仁,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓辕狰,卻偏偏與公主長得像改备,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蔓倍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

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