Android UI渲染

1. 過度繪製優化

什麼是過度繪製?

Overdraw(過度繪製)描述的是屏幕上的某個像素在同一幀的時間內被繪製了多次。在多層次重疊的UI結構裏面,如果不可見的UI也在做繪製的操作,會導致某些像素區域被繪製了多次。這樣就會浪費大量的CPU以及GPU資源。

從開發者選項可以設置看到過度繪製區域,紅色是過度繪製最嚴重的區域。

優化方式:

1. 移除佈局中多餘的背景 
2. 減少層級嵌套,使用約束佈局
3. 減少透明度使用

######自定義view onDraw造成的過度渲染,可以使用canvas.clipRect方法,來對canvas進行裁剪。或者使用canvas.quickReject.

2.其他UI優化

多使用padding代替margin

使用merge 可以減少層級結構。

使用ViewStub,延遲加載,不必須時候不加載

儘量少使用bitmap,多使用shape之類

16ms的問題

主流的刷新頻率是60次/秒,折算出來就是16ms刷新一次。如果大於這個時間,人眼就會感覺到卡頓。但是16ms不是draw的時間,實際上留給draw的時間比這個要少一些,對於自定義view,onDraw的執行時長要儘量很少。

請注意:任何時候View中的繪製內容發生變化時,都會需要重新創建DisplayList,渲染DisplayList,更新到屏幕上等一系列操作。這個流程的表現性能取決於你的View的複雜程度,View的狀態變化以及渲染管道的執行性能。舉個例子,假設某個Button的大小需要增大到目前的兩倍,在增大Button大小之前,需要通過父View重新計算並擺放其他子View的位置。修改View的大小會觸發整個HierarcyView的重新計算大小的操作。如果是修改View的位置則會觸發HierarchView重新計算其他View的位置。如果佈局很複雜,這就會很容易導致嚴重的性能問題。

使用矢量圖代替jpg, png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章