Android效能優化課程 過度繪製

2021-07-14 13:21:48 字數 1587 閱讀 9188

如果你粉刷過乙個房間或一所房子,就會知道給牆壁塗上顏色需要做大量的工作。假如你還要重新粉刷一次的話,第二次粉刷的顏色會覆蓋住第一次的顏色,第一次的顏色就永遠不可見了,等於你第一次粉刷做的大量工作就完全被浪費掉。這太可怕了。

同樣的道理,如果在你的應用程式中浪費精力去繪製一些東西同樣會產生效能問題。過度繪製這個名詞就是用來描述螢幕上乙個畫素在單個幀中被重繪了多少次。

過度繪製其實是乙個效能和設計的交叉點。我們在設計上追求很華麗的視覺效果,但一般來說這種視覺效果會採用非常多的層疊元件來實現,這時候就會帶來過度繪製的問題。比如:我們有一疊ui元件,這些元件從上到下分布,上面的元件是可以被使用者看見的,而在下面的元件是不可見的,但是我們依然要花很多時間去繪製那些不可見的元件,因為在某些時候,它也可能會顯示出來。但這確實是在浪費cpu和gpu的資源啊。

開啟這個選項後,你的手機會出現一些奇怪的顏色,請不要驚慌,這是正常的。系統正在你的螢幕上通過給畫素繪製不同的顏色來

顯示這個畫素被過度繪製的次數。一共有四種顏色:藍色、綠色、淡紅、深紅。根據過度繪製的次數,依次遞增。1x過度繪製是藍色、2x是綠色、3x是淡紅、4x是深紅。

你的目標就是盡可能的減少過度繪製,使得你在螢幕更多的看到的是藍色而不是深紅色。

過度繪製也許是因為你的ui布局中存在大量重疊的view,但乙個更為普遍的情況是因為那些不必要的重疊著的背景。例如某個activity有乙個背景,layout也有自己的背景,同時它的子view又分別有自己的背景。僅僅是通過移除不需要的背景,就可以使你的應用程式從一大群那種憤怒的紅色變成一片像大海一樣平靜的藍色。

雖然過度繪製很容易出現,但也比較容易消滅。這就是為什麼你需要我們android效能課程中的其他資源,不要忘記加入google+社群哦(繼續推銷google+中)。分析**時請保持冷靜,千萬要記住,效能很重要。(萬年不變的一句結尾)

太多重疊的背景

重疊著的背景有時候是有必要的,有時候是沒必要的。這要視你的專案具體情況而定.

太多疊加的view

或者本來這個ui布局就很複雜或者你是為了追求乙個炫麗的視覺效果,這都有可能使得很多view疊加在一起。這個情況非常普遍,下面的建議中會談談怎麼減少這種情況帶來的影響。

複雜的layout層級

複雜的層級關係,這個在布局中也很常見,下面也會說這種情況怎麼做可以盡可能的減少過度繪製。

太多重疊的view

第乙個建議是:使用viewstub來載入一些不常用的布局,它是乙個輕量級且預設不可見的檢視,可以動態的載入乙個布局,只有你用到這個重疊著的view的時候才載入,推遲載入的時間。第二個建議是:如果使用了類似viewpager+fragment這樣的組合或者有多個fragment在乙個介面上,需要控制fragment的顯示和隱藏,盡量使用動態地inflation view,它的效能要比setvisiblity好。

複雜的layout層級

這裡的建議比較多一些,首先推薦用android提供的布局工具hierarchy viewer來檢查和優化布局。第乙個建議是:如果巢狀的線性布局加深了布局層次,可以使用相對布局來取代。第二個建議是:用標籤來合併布局,這可以減少布局層次。第三個建議是:用標籤來重用布局,抽取通用的布局可以讓布局的邏輯更清晰明了。記住,這些建議的最終目的都是使得你的layout在hierarchy viewer裡變得寬而淺,而不是窄而深。

效能優化過度繪製

過度繪製對效能會產生不必要的開銷,如果能減少不必要的繪製,將有助於效能的提公升。以下以在手機上進行 debug gpu overdraw 舉例 看到整個螢幕有顏色變化就對了 1 這裡有四層顏色的指示,顏色的層級表示螢幕上有多少畫素過度繪製 什麼是過度繪製,假設你在根檢視viewgroup match...

Android UI效能優化 過度繪製篇

每過幾年,就會有傳聞說某個博物館在用x光掃瞄一副無價的名畫之後,發現畫作的作者其實重用了老的畫布,在名畫的底下還藏著另一副沒有被發現的畫作。有時候,博物館還能用高階的影象技術來還原畫布上的原作。android裡面的view的繪製就是類似的情況。當android系統繪製螢幕的時候,先畫父view,然後...

Android效能優化

android效能優化 1.http用gzip壓縮,設定連線超時時間和響應超時時間 http請求按照業務需求,分為是否可以快取和不可快取,那麼在無網路的環境中,仍然通過快取的httpresponse瀏覽部分資料,實現離線閱讀。2.listview 效能優化 1 復用convertview 在geti...