Android過度繪製解決方案
過度繪製的危害以及產生的原因,可以參考網路資料。
優化過度繪製,是為了保證APP的流暢度,而APP卡頓不全部是因為佈局問題導致的, 佈局問題會導致渲染時間延長 從而造成卡頓。
所以當有掉幀的時候,不一定是佈局的問題
PS:除錯APP過度繪製,先開啟開發者選項中的:GPU呈現模式分析和除錯GPU過度繪製的開關。
開啟之後看這個頁面的過度繪製情況。
1. 頁面佈局上面顏色表示的含義:
a.原色 – 無過度繪製
b.藍色 – 1次過度繪製
c.綠色 – 2次過度繪製
d.粉色 – 3次過度繪製
e.紅色 – 4次過度繪製
優化原則: 大部分割槽域為藍色和綠色,不允許出現深紅色(4層以上),允許出現少量(1/4螢幕)的淺紅色(3層),在文字和圖示區域,允許一些3x、4x繪製。
2. 下面柱狀圖展示的顏色值 表示的含義:
柱狀圖每一根代表一幀,其高度表示“渲染這一幀耗時” 。6.0之後的系統都使用8種顏色表示 每一幀裡面各個階段的耗時情況
3. 可以看出來 當繪製、測量佈局、動畫、輸入處理、其他時間延遲比較高的時候 需要我們來處理。
測量、佈局耗時是我們需要優化的過度繪製的主要原因。
清理過度繪製的5板斧
-
去掉多餘背景。包括window的背景、Activity的大背景、父View的背景。
如果一個頁面的或者一個Fragment的整個區域都有重繪,那麼就需要找它的背景或者它的window的背景。
-
合理使用控制元件。
儘量少用巢狀佈局; 如果使用RelativeLayout 可以減少佈局層級,就儘量使用RelativeLayout; 如果過於複雜就是用 include進行分化;可以嘗試使用約束佈局ConstraintLayout ;
-
少用帶有 alpha 顏色值,如果可以通過改變色值來實現的效果,儘量不要通過 透明度來進行設定。
-
靈活使用.9圖片。如果碰到加父View有邊框,儘量使用.9圖邊,因為Android 2D渲染器只對draw9patch的透明區域進行優化,不會造成多一次的繪製。
-
使用include、merge、viewStub優化佈局節點。