大多數(shù)用戶感知到的卡頓等性能問題的最主要根源都是因?yàn)殇秩拘阅堋脑O(shè)計(jì)師的角度,他們希望App能夠有更多的動(dòng)畫,圖片等時(shí)尚元素來實(shí)現(xiàn)流暢的用 戶體驗(yàn)。但是Android系統(tǒng)很有可能無法及時(shí)完成那些復(fù)雜的界面渲染操作。Android系統(tǒng)每隔16ms發(fā)出VSYNC信號(hào),觸發(fā)對(duì)UI進(jìn)行渲染, 如果每次渲染都成功,這樣就能夠達(dá)到流暢的畫面所需要的60fps,為了能夠?qū)崿F(xiàn)60fps,這意味著程序的大多數(shù)操作都必須在16ms內(nèi)完成。

如果你的某個(gè)操作花費(fèi)時(shí)間是24ms,系統(tǒng)在得到VSYNC信號(hào)的時(shí)候就無法進(jìn)行正常渲染,這樣就發(fā)生了丟幀現(xiàn)象。那么用戶在32ms內(nèi)看到的會(huì)是同一幀畫面。

用戶容易在UI執(zhí)行動(dòng)畫或者滑動(dòng)ListView的時(shí)候感知到卡頓不流暢,是因?yàn)檫@里的操作相對(duì)復(fù)雜,容易發(fā)生丟幀的現(xiàn)象,從而感覺卡頓。有很多原 因可以導(dǎo)致丟幀,也許是因?yàn)槟愕膌ayout太過復(fù)雜,無法在16ms內(nèi)完成渲染,有可能是因?yàn)槟愕腢I上有層疊太多的繪制單元,還有可能是因?yàn)閯?dòng)畫執(zhí)行 的次數(shù)過多。這些都會(huì)導(dǎo)致CPU或者GPU負(fù)載過重。
我們可以通過一些工具來定位問題,比如可以使用HierarchyViewer來查找Activity中的布局是否過于復(fù)雜,也可以使用手機(jī)設(shè)置里 面的開發(fā)者選項(xiàng),打開Show GPU Overdraw等選項(xiàng)進(jìn)行觀察。你還可以使用TraceView來觀察CPU的執(zhí)行情況,更加快捷的找到性能瓶頸。