大多數(shù)用戶感知到的卡頓等性能問題的最主要根源都是因為渲染性能媒佣。從設(shè)計師的角度,他們希望App能夠有更多的動畫,圖片等時尚元素來實現(xiàn)流暢的用 戶體驗畏铆。但是Android系統(tǒng)很有可能無法及時完成那些復(fù)雜的界面渲染操作。Android系統(tǒng)每隔16ms發(fā)出VSYNC信號吉殃,觸發(fā)對UI進行渲染辞居, 如果每次渲染都成功楷怒,這樣就能夠達(dá)到流暢的畫面所需要的60fps,為了能夠?qū)崿F(xiàn)60fps瓦灶,這意味著程序的大多數(shù)操作都必須在16ms內(nèi)完成鸠删。
如果你的某個操作花費時間是24ms,系統(tǒng)在得到VSYNC信號的時候就無法進行正常渲染贼陶,這樣就發(fā)生了丟幀現(xiàn)象刃泡。那么用戶在32ms內(nèi)看到的會是同一幀畫面。
用戶容易在UI執(zhí)行動畫或者滑動ListView的時候感知到卡頓不流暢碉怔,是因為這里的操作相對復(fù)雜烘贴,容易發(fā)生丟幀的現(xiàn)象,從而感覺卡頓撮胧。有很多原 因可以導(dǎo)致丟幀桨踪,也許是因為你的layout太過復(fù)雜,無法在16ms內(nèi)完成渲染芹啥,有可能是因為你的UI上有層疊太多的繪制單元锻离,還有可能是因為動畫執(zhí)行 的次數(shù)過多。這些都會導(dǎo)致CPU或者GPU負(fù)載過重墓怀。
我們可以通過一些工具來定位問題汽纠,比如可以使用HierarchyViewer來查找Activity中的布局是否過于復(fù)雜,也可以使用手機設(shè)置里 面的開發(fā)者選項捺疼,打開Show GPU Overdraw等選項進行觀察疏虫。你還可以使用TraceView來觀察CPU的執(zhí)行情況,更加快捷的找到性能瓶頸啤呼。