在真機設備下有一個開發者選項,這個大家都知道,我們最常用的就打開'USB調試'功能,方便真機調試。 在這開發者選項中還有個選項,'調試GPU過度繪製' 這裡選擇第二個選項'顯示過度繪製區域' 可以看到針對該界面 每一個控制項周邊都有一塊顏色區域 顏色對應: 原色:沒有過度繪製 藍色:1 次過度繪製 綠 ...
在真機設備下有一個開發者選項,這個大家都知道,我們最常用的就打開'USB調試'功能,方便真機調試。
在這開發者選項中還有個選項,'調試GPU過度繪製'
這裡選擇第二個選項'顯示過度繪製區域'
可以看到針對該界面 每一個控制項周邊都有一塊顏色區域
顏色對應:
- 原色:沒有過度繪製
- 藍色:1 次過度繪製
- 綠色:2 次過度繪製
- 粉色:3 次過度繪製
- 紅色:4 次及以上過度繪製
測試發現大多數手機app都存在過度繪製的問題,這也因為產品設計的時候沒有這種佈局嵌套的概念,導致程式員開發出產品想要的效果就容易造成過度繪製的情況。
過度繪製造成的結果是在部分性能差的設備,會出現卡頓的問題,不過一般對於當年出的設備不會造成影響。
--------------------------------------------------------------------------------------------------------------------------------------------
此外,開發者選項中還有一個選項‘GPU呈現模式分析’,選擇'在屏幕上顯示為條形圖'就會發現界面底部出現條形圖
每一條柱狀線都包含三部分,
藍色代表測量繪製Display List的時間,
紅色代表OpenGL渲染Display List所需要的時間,
黃色代表CPU等待GPU處理的時間。
中間有一根綠色的橫線,代表16ms,我們需要確保每一幀花費的總時間都低於這條橫線,這樣才能夠避免出現卡頓的問題。
當頻繁超過綠線的時候對於性能不好的時候就會出現卡頓的情況。
相關知識:
CPU: 中央處理器,它集成了運算,緩衝,控制等單元,包括繪圖功能.CPU將對象處理為多維圖形,紋理(Bitmaps、Drawables等都是一起打包到統一的紋理).
GPU:一個類似於CPU的專門用來處理Graphics的處理器, 作用用來幫助加快格柵化操作,當然,也有相應的緩存數據(例如緩存已經光柵化過的bitmap等)機制。
OpenGL ES是手持嵌入式設備的3DAPI,跨平臺的、功能完善的2D和3D圖形應用程式介面API,有一套固定渲染管線流程. 附相關OpenGL渲染流程資料
DisplayList 在Android把XML佈局文件轉換成GPU能夠識別並繪製的對象。這個操作是在DisplayList的幫助下完成的。DisplayList持有所有將要交給GPU繪製到屏幕上的數據信息。
格柵化 是 將圖片等矢量資源,轉化為一格格像素點的像素圖,顯示到屏幕上,過程圖如下.
------------------------------------------------------------------------------------------------------------------------------------
優化
Android對於界面渲染流暢的要求為 1秒鐘60幀 即每一幀都在16.6ms內
優化點:
1、icon圖片儘量使用 png格式 , 照片等大型圖片用jpg
2、減少多餘的嵌套層數
3、外層設置背景顏色之後,內部view可以不再設置背景顏色值
4、自定義view的優化