應用UI卡頓常見原因主要在以下幾個方面:
1.人爲在UI線程中做輕微耗時操作,導致UI線程卡頓;
2.佈局Layout過於複雜,無法在16ms內完成渲染;
3.同一時間動畫執行的次數過多,導致CPU或GPU負載過重;
4.View過度繪製,導致某些像素在同一幀時間內被繪製多次,從而使CPU或GPU負載過重;
5.View頻繁的觸發measure、layout,導致measure、layout累計耗時過多及整個View頻繁的重新渲染;
6.內存頻繁觸發GC過多(同一幀中頻繁創建內存),導致暫時阻塞渲染操作;
7.冗餘資源及邏輯等導致加載和執行緩慢;
8.臭名昭著的ANR;
Vsync機制:
通過Vsync信號來同步UI繪製和動畫,使得它們可以獲得一個達到60fps的固定的幀率;
爲了理解App是如何進行渲染的,我們必須瞭解手機硬件是如何工作,那麼就必須理解什麼是VSYNC。
在講解VSYNC之前,我們需要了解兩個相關的概念:
Refresh Rate:代表了屏幕在一秒內刷新屏幕的次數,這取決於硬件的固定參數,例如60Hz。
Frame Rate:代表了GPU在一秒內繪製操作的幀數,例如30fps,60fps。
GPU會獲取圖形數據進行渲染,然後顯示器硬件負責把渲染後的內容呈現到屏幕上,他們兩者不停的進行協作。