1.
介紹卡頓之前,我們先了解幾個名詞
Jank
:爲了保證應用的平滑性,每一幀渲染時間不能超過16ms
,達到60幀每秒
;如果UI渲染慢的話,就會發生丟幀,這樣用戶就會感覺到不連貫性,我們稱之爲Jank
FPS
:每秒的幀數。對於界面一直不停刷新的應用如視頻,可以使用FPS來評價其流暢度
丟幀
:應該在16ms完成的工作因各種原因沒有做完,佔了下n個16ms的時間,相當於丟了n幀
SM
:和丟幀相對,在VSYNC
機制中1s內有60個loop,因爲某幾次工作超過了16ms(丟幀),這樣loop就無法運行60次(理論最大值);流暢度越低說明當前程序越卡頓;SM
能夠客觀衡量Android程度卡的程度
2.
造成應用卡頓原因無非以下幾種場景:
1.
xml佈局不合理(造成過度繪製)
2.
代碼邏輯堵塞UI線程
針對第1點
,是否過度繪製,我們可以通過 手機 -> 開發者選項 -> 調試GPU過度繪製,開啓後,運行APP查看區域佈局情況,佈局繪製了越多層,紅色就越深,越不合理
針對第2點
,現在也有一些開源庫可以輔助我們定位卡頓原因;像 AndroidPerformanceMonitor、BlockCanary、leakcanary等
3.
參考
1.
移動APP性能評測-流暢度評測
2.
Android性能優化-App卡頓
3.
BlockCanary
4.
UI卡頓檢測的兩種方法
5.
BlockCanary — 輕鬆找出Android App界面卡頓元兇