1. 程式人生 > >Android過度繪製解決方案

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板斧

  1. 去掉多餘背景。包括window的背景、Activity的大背景、父View的背景。

    如果一個頁面的或者一個Fragment的整個區域都有重繪,那麼就需要找它的背景或者它的window的背景。

  2. 合理使用控制元件。

    儘量少用巢狀佈局; 如果使用RelativeLayout 可以減少佈局層級,就儘量使用RelativeLayout; 如果過於複雜就是用 include進行分化;可以嘗試使用約束佈局ConstraintLayout ;

  3. 少用帶有 alpha 顏色值,如果可以通過改變色值來實現的效果,儘量不要通過 透明度來進行設定。

  4. 靈活使用.9圖片。如果碰到加父View有邊框,儘量使用.9圖邊,因為Android 2D渲染器只對draw9patch的透明區域進行優化,不會造成多一次的繪製。

  5. 使用include、merge、viewStub優化佈局節點。