Android 列表滑動(dòng)性能優(yōu)化總結(jié)

列表滑動(dòng)性能優(yōu)化是一個(gè)老生常談的問(wèn)題粥脚,最近在做項(xiàng)目的時(shí)候又遇到了列表滑動(dòng)卡頓的問(wèn)題捂人,我在經(jīng)過(guò)多次思考和嘗試后,終于找到了滑動(dòng)卡頓的元兇膏燃,于是將經(jīng)驗(yàn)總結(jié)下來(lái)。

ViewHolder

先說(shuō)說(shuō)最常規(guī)的ViewHolder何什。ViewHolder的出現(xiàn)是為了解決在綁定視圖數(shù)據(jù)的時(shí)候使用findViewById遍歷視圖樹(shù)(以深度優(yōu)先的方式)查找視圖引起耗時(shí)操作的問(wèn)題组哩,將第一次查找到的視圖放入靜態(tài)的ViewHolder中,以后綁定新數(shù)據(jù)時(shí)直接從ViewHolder中拿到視圖引用处渣。在ListView中使用ViewHolder是基本的優(yōu)化思路伶贰,當(dāng)然最好的是直接使用RecyclerView,它自帶了ViewHolder罐栈。(推薦使用MultiType作為RecyclerView的Adapter黍衙,這個(gè)庫(kù)設(shè)計(jì)的很優(yōu)美)

數(shù)據(jù)處理

很多時(shí)候從我們要對(duì)服務(wù)器上獲取下來(lái)的列表數(shù)據(jù)進(jìn)行一次二次加工,以便轉(zhuǎn)化為我們界面上要顯示的數(shù)據(jù)荠诬,這些操作可能會(huì)比較耗時(shí)琅翻。比如字符串拼接、時(shí)間格式化等操作都是比較耗時(shí)的操作柑贞。比較好的實(shí)踐是將列表數(shù)據(jù)的加工在notifyDataSetChanged()之前在后臺(tái)線程做好方椎,在Adapter中只做數(shù)據(jù)的綁定。

Item View 的變化

有時(shí)候我們會(huì)根據(jù)數(shù)據(jù)類(lèi)型來(lái)控制一個(gè)View的顯隱凌外,當(dāng)給一個(gè)View設(shè)置setVisibility(View.GONE)的時(shí)候辩尊,會(huì)觸發(fā)布局的重新測(cè)量、布局康辑、繪制等操作摄欲,若itemView的布局比較復(fù)雜,重新測(cè)量繪制會(huì)很耗時(shí)間疮薇,引起列表卡頓胸墙。這個(gè)時(shí)候可以將數(shù)據(jù)和itemView分解成不同的類(lèi)型,根據(jù)類(lèi)型來(lái)綁定對(duì)應(yīng)的itemView按咒,減少布局的重繪操作迟隅。

重用OnClickListener

通常我們?yōu)锽utton設(shè)置點(diǎn)擊事件的時(shí)候都是直接創(chuàng)建一個(gè)匿名內(nèi)部類(lèi)的對(duì)象(new OnClickListener{}),習(xí)慣了這種綁定事件的方式后我們可能在列表中也這么做。在列表滑動(dòng)的時(shí)候會(huì)不停的重復(fù)創(chuàng)建新的OnClickListener的操作智袭,舊的OnClickListener會(huì)被標(biāo)記為需要垃圾回收奔缠,當(dāng)需要回收的對(duì)象過(guò)多的時(shí)候會(huì)引起GC,導(dǎo)致列表卡頓吼野⌒0ィ可以創(chuàng)建一個(gè)通用的OnClickListener,把數(shù)據(jù)放入Button的Tag中瞳步,根據(jù)id來(lái)判斷是哪個(gè)Button執(zhí)行了點(diǎn)擊闷哆,來(lái)取出數(shù)據(jù)、執(zhí)行不同的邏輯单起。

圖片的異步加載

用Glide抱怔、Picasso、Fresco等圖片異步加載框架嘀倒。

界面優(yōu)化

優(yōu)化布局層級(jí)減少過(guò)渡繪制屈留、優(yōu)化布局方式提高布局效率。關(guān)于這點(diǎn)官方推薦使用ConstraintLayout括儒,在我目前的實(shí)踐中绕沈,ConstraintLayout作為RecyclerView的Item布局的時(shí)候可能會(huì)有卡頓現(xiàn)象(主要是布局重繪引起的)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末帮寻,一起剝皮案震驚了整個(gè)濱河市乍狐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌固逗,老刑警劉巖浅蚪,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異烫罩,居然都是意外死亡惜傲,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)贝攒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)盗誊,“玉大人,你說(shuō)我怎么就攤上這事隘弊」猓” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵梨熙,是天一觀的道長(zhǎng)开镣。 經(jīng)常有香客問(wèn)我,道長(zhǎng)咽扇,這世上最難降的妖魔是什么邪财? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任陕壹,我火速辦了婚禮,結(jié)果婚禮上树埠,老公的妹妹穿的比我還像新娘糠馆。我一直安慰自己,他們只是感情好弥奸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布榨惠。 她就那樣靜靜地躺著,像睡著了一般盛霎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上耽装,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天愤炸,我揣著相機(jī)與錄音,去河邊找鬼掉奄。 笑死规个,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的姓建。 我是一名探鬼主播诞仓,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼葫慎!你這毒婦竟也來(lái)了冈欢?” 一聲冷哼從身側(cè)響起啦鸣,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谍婉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體镀钓,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡穗熬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丁溅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唤蔗。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖窟赏,靈堂內(nèi)的尸體忽然破棺而出妓柜,到底是詐尸還是另有隱情,我是刑警寧澤饰序,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布领虹,位于F島的核電站,受9級(jí)特大地震影響求豫,放射性物質(zhì)發(fā)生泄漏塌衰。R本人自食惡果不足惜诉稍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望最疆。 院中可真熱鬧杯巨,春花似錦、人聲如沸努酸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)获诈。三九已至仍源,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間舔涎,已是汗流浹背笼踩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留亡嫌,地道東北人嚎于。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像挟冠,于是被迫代替她去往敵國(guó)和親于购。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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