google 公開課 https://www.udacity.com/course/ud825
Render Performance 主要講的是關于繪制性能的優化
界面卡頓的根源
android系統采用60幀每秒的刷新頻率,因此幀間隔是16ms。我們所有的計算過程都要在16ms中完成,如若不然,就會導致丟幀,只要有丟幀,就會導致界面卡頓。
android View的簡單的繪制過程
android_performance.png
上圖中,比較慢的過程分別是
- 生成display list
- 將繪制信息傳送到GPU
優化
android系統已經對我們的繪制過程進行了大量的優化,對于開發者而言,我們主要關注下面兩點
-
overdraw (GPU端)
overdraw主要會帶來無效的繪制,拖慢速度- overdraw的Debug工具
android系統已經為我們提供了檢查overdraw的工具,在設置->開發者選項 中即可開啟。開啟后,界面上將會出現4種顏色,其中,藍色表示 overdraw 一次,綠色兩次,淺紅三次,深紅四次,如果現實的是原來的顏色,表示沒有overdraw - 如何減少overdraw
減少overdraw主要要注意以下幾點- 不要設置無用的背景。
例如:將window的背景設置為null
getWindow().setBackgroudDrawable(null);
還有,移除layout中非必要的背景 - 對于自己繪制的custom view,使用cliprect方法來指定繪制區域,避免 canvas做無效繪制
- 不要設置無用的背景。
- overdraw的Debug工具
layout (CPU端)
layout生成display list也是耗時的工作,每次layout大小,位置等信息的改變也會導致display list的重新生成,為了加快display list的生成速度,我們要盡可能的保證layout的簡單平坦
使用Hierarchy view找出layout中較慢的點。詳情請參考文章開發的視頻