性能優(yōu)化之渲染優(yōu)化

一、卡頓現(xiàn)象

Android系統(tǒng)每隔16ms就重新繪制一次Activity,也就是說仪壮,我們的應(yīng)用必須在16ms內(nèi)完成屏幕刷新的全部邏輯操作,這樣才能達(dá)到每秒60幀湿酸,然而這個(gè)每秒幀數(shù)的參數(shù)由手機(jī)硬件所決定婿屹,現(xiàn)在大多數(shù)手機(jī)屏幕刷新率是60赫茲(赫茲是國際單位制中頻率的單位,它是每秒中的周期性變動(dòng)重復(fù)次數(shù)的計(jì)量)推溃,也就是說我們有16ms(1000ms/60次=16.66ms)的時(shí)間去完成每幀的繪制邏輯操作昂利,如果錯(cuò)過了,比如說我們花費(fèi)34ms才完成計(jì)算铁坎,那么就會(huì)出現(xiàn)我們稱之為丟幀的情況蜂奸。


Paste_Image.png

安卓系統(tǒng)嘗試在屏幕上繪制新的一幀,但是這一幀還沒準(zhǔn)備好硬萍,所以畫面就不會(huì)刷新。如果用戶盯著同一張圖看了32ms而不是16ms,用戶會(huì)很容易察覺出卡頓感觉至,哪怕僅僅出現(xiàn)一次掉幀窜护,用戶都會(huì)發(fā)現(xiàn)動(dòng)畫不是很順暢,如果出現(xiàn)多次掉幀买羞,就會(huì)出現(xiàn)明顯卡頓現(xiàn)象袁勺。

二、渲染管線

Android系統(tǒng)的渲染管線分為兩個(gè)關(guān)鍵組件:CPU和GPU畜普,它們共同工作期丰,在屏幕上繪制圖片,每個(gè)組件都有自身定義的特定流程吃挑。我們必須遵守這些特定的操作規(guī)則才能達(dá)到效果钝荡。


Paste_Image.png

在CPU方面,最常見的性能問題是不必要的布局和失效儒鹿,這些內(nèi)容必須在視圖層次結(jié)構(gòu)中進(jìn)行測(cè)量化撕、清除并重新創(chuàng)建。
在GPU方面约炎,最常見的問題是我們所說的過度繪制(overdraw)植阴,通常是在像素著色過程中蟹瘾,通過其他工具進(jìn)行后期著色時(shí)浪費(fèi)了GPU處理時(shí)間。

格柵化就是將例如字符串掠手、按鈕憾朴、路徑或者形狀的一些高級(jí)對(duì)象,拆分到不同的像素上在屏幕上進(jìn)行顯示喷鸽,格柵化是一個(gè)非常費(fèi)時(shí)的操作众雷。

圖像處理器(GPU顯卡的處理器),GPU使用一些指定的基礎(chǔ)指令集做祝,主要是多邊形和紋理砾省,也就是圖片,CPU在屏幕上繪制圖像前會(huì)向GPU輸入這些指令混槐,這一過程通常使用的API就是Android的OpenGL ES编兄,這就是說,在屏幕上繪制UI對(duì)象時(shí)無論是按鈕声登、路徑或者復(fù)選框狠鸳,都需要在CPU中首先轉(zhuǎn)換為多邊形或者紋理,然后再傳遞給GPU進(jìn)行格柵化悯嗓。


Paste_Image.png

一個(gè)UI對(duì)象轉(zhuǎn)換為一系列多邊形和紋理的過程肯定相當(dāng)耗時(shí)件舵,從CPU上傳處理數(shù)據(jù)到GPU同樣也很耗時(shí)。所以很明顯脯厨,我們需要盡量減少對(duì)象轉(zhuǎn)換的次數(shù)铅祸,以及上傳數(shù)據(jù)的次數(shù),幸虧俄认,OpenGL ES API允許數(shù)據(jù)上傳到GPU后可以對(duì)數(shù)據(jù)進(jìn)行保存个少,當(dāng)我們下次繪制一個(gè)按鈕時(shí),只需要在GPU存儲(chǔ)器里引用它眯杏,然后告訴OpenGL如何繪制就可以了夜焦,一條經(jīng)驗(yàn)之談:渲染性能的優(yōu)化就是盡可能地上傳數(shù)據(jù)到GPU,然后盡可能長地在不修改的情況下保存數(shù)據(jù)岂贩,因?yàn)槊看紊蟼髻Y源到GPU時(shí)茫经,我們都會(huì)浪費(fèi)寶貴的處理時(shí)間。

三萎津、GPU的主要問題 -過度繪制(overdraw)

過度繪制指的是屏幕上的某個(gè)像素點(diǎn)在同一幀的時(shí)間內(nèi)被繪制了多次卸伞。


Paste_Image.png

問題就在于此,因?yàn)槊看蜗袼亟?jīng)過渲染后锉屈,并不是用戶最后看到的部分荤傲,這就是在浪費(fèi)GPU的時(shí)間。目前流行的一些布局是一把雙刃劍颈渊,帶給我們漂亮視覺感受的同時(shí)遂黍,也造成過度繪制的問題终佛,為了最大限度地提高應(yīng)用程序的性能,我們必須盡量減少過度繪制雾家。
Android手機(jī)提供了查看過度繪制情況的工具铃彰,在開發(fā)者選項(xiàng)中打開


Paste_Image.png

手機(jī)屏幕顯示會(huì)出現(xiàn)一些異常不用過于驚慌,Android在屏幕上使用不同顏色芯咧,標(biāo)記過度繪制的區(qū)域牙捉,如果某個(gè)像素點(diǎn)只渲染了一次,我們看到的是它原來的顏色敬飒,隨著過度繪制的增多邪铲,標(biāo)記顏色也會(huì)逐漸加深。

四无拗、Hierarchy Viewer工具

Hierarchy Viewer將幫助我們快速可視化整個(gè)UI結(jié)構(gòu)霜浴,另外,它還提供一個(gè)更好的方法蓝纲,讓我們理解這個(gè)結(jié)構(gòu)內(nèi)的獨(dú)特視圖的相對(duì)渲染性能。
開啟:


Paste_Image.png

Paste_Image.png

Paste_Image.png

Paste_Image.png

我們可能注意到每個(gè)視圖有三個(gè)獨(dú)特的圓點(diǎn)晌纫,它們可能具有不同的顏色税迷,綠色、黃色或紅色锹漱。
但是箭养,這些圓點(diǎn)的順序也具有特定的含義。最左邊的圓點(diǎn)表示渲染管道的測(cè)量階段哥牍,中間的圓點(diǎn)表示布局階段毕泌,最右邊的圓點(diǎn)表示渲染管道的繪制階段。
綠色表示這個(gè)管道階段嗅辣,這個(gè)視圖的渲染速度快于至少一半以上的其他視圖撼泛。
黃色表示它的渲染速度屬于比較慢的50%,如果我們看到紅色澡谭,意味著這是視圖層級(jí)中最慢的節(jié)點(diǎn)愿题,我們還應(yīng)該知道紅色節(jié)點(diǎn)可能是存在問題。

優(yōu)化思想:查看自己的布局蛙奖,層次是否很深以及渲染比較耗時(shí)潘酗,然后想辦法能否減少層級(jí)以及優(yōu)化每一個(gè)View的渲染時(shí)間。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末雁仲,一起剝皮案震驚了整個(gè)濱河市仔夺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌攒砖,老刑警劉巖缸兔,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件日裙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡灶体,警方通過查閱死者的電腦和手機(jī)阅签,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝎抽,“玉大人政钟,你說我怎么就攤上這事≌两幔” “怎么了养交?”我有些...
    開封第一講書人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瓢宦。 經(jīng)常有香客問我碎连,道長,這世上最難降的妖魔是什么驮履? 我笑而不...
    開封第一講書人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任鱼辙,我火速辦了婚禮,結(jié)果婚禮上玫镐,老公的妹妹穿的比我還像新娘倒戏。我一直安慰自己,他們只是感情好恐似,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開白布杜跷。 她就那樣靜靜地躺著,像睡著了一般矫夷。 火紅的嫁衣襯著肌膚如雪葛闷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,785評(píng)論 1 314
  • 那天双藕,我揣著相機(jī)與錄音淑趾,去河邊找鬼。 笑死忧陪,一個(gè)胖子當(dāng)著我的面吹牛治笨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赤嚼,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼旷赖,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了更卒?” 一聲冷哼從身側(cè)響起等孵,我...
    開封第一講書人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蹂空,沒想到半個(gè)月后俯萌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體果录,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年咐熙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了弱恒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡棋恼,死狀恐怖返弹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情爪飘,我是刑警寧澤义起,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站师崎,受9級(jí)特大地震影響默终,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜犁罩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一齐蔽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧床估,春花似錦肴熏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽源哩。三九已至鞋吉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間励烦,已是汗流浹背谓着。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坛掠,地道東北人赊锚。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像屉栓,于是被迫代替她去往敵國和親舷蒲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

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