Android性能優化——減少過度繪製

Overdraw(過度繪製)

過度繪製描述的是屏幕上的某個像素在同一幀的時間內被繪製了多次。在多層次重疊的UI結構裏面,如果不可見的UI也在做繪製的操作,會導致某些像素區域被繪製了多次,浪費CPU以及GPU資源,無法在1幀的時間內完成繪製,就會造成卡頓。
檢測方法是開啓開發人員選項中顯示過度繪製區域的開關,層數與顏色對應如下圖所示,
原色,沒有發生過度繪製,屏幕上的像素點只被繪製了 1 次;
藍色,1倍過度繪製,屏幕上的像素點被繪製了2次;
綠色,2倍過度繪製,屏幕上的像素點被繪製了3次;
粉色,3倍過度繪製,屏幕上的像素點被繪製了4次;
紅色,4倍過度繪製,屏幕上的像素點被繪製了5次。
在這裏插入圖片描述

頁面過度繪製優化前後的對比

檢查了頁面繪製性能情況,發現普遍存在2~3層過度繪製的問題,於是進行優化。
軟件詳情頁:3.X—>1.X,部分卡片減少3層
在這裏插入圖片描述

優化的技巧

1)去掉window的背景; 2)搜索background關鍵字,將重複設置背景的地方爲null或者直接刪除; 3)搜索draw關鍵字,刪除不必要的繪製; 4)ImageView可能會同時設置src和background,刪除其中一個; 5)懷疑某一層的背景設置問題,直接改變該層的顏色或者直接去掉,看看是否會減少; 6)佈局重構,將一些不必要的重疊、嵌套又各自帶背景的控件平鋪開來,再減少佈局層級的同時,也能夠減少過度繪製; 7)不透明的背景設計,控件點擊態,也會導致過度繪製,需要權衡設計與性能;