原理
一般我們說(shuō) 頁(yè)面滑動(dòng)的流暢性 保持在60fps以上? 指的就是每一秒種會(huì)有60幀的畫(huà)面更新 我們看到的就是流暢的效果 也就是說(shuō) 一幀的時(shí)間為16.7毫秒
流暢展示
CPU的工作
花費(fèi)一定的時(shí)間? 做文本的布局 UI的計(jì)算 視圖的繪制 以及圖片的解碼等 最終把產(chǎn)生的位圖提交給GPU
GPU的工作
進(jìn)行響應(yīng)的圖片合成 紋理渲染?
在下一幀到來(lái)之前重復(fù)重復(fù)操作 展示?
掉幀展示
CPU花費(fèi)的時(shí)間過(guò)長(zhǎng) 留給GPU的時(shí)間不夠 超過(guò)16.7毫秒 則會(huì)產(chǎn)生掉幀
總結(jié)
在規(guī)定的的16.7毫秒 下個(gè)一個(gè)VSync信號(hào)到來(lái)之前 CPU 和GPU 沒(méi)有完成畫(huà)面的合成 就會(huì)導(dǎo)致卡頓 掉幀
那么問(wèn)題來(lái)了 我們?nèi)绾芜M(jìn)行滑動(dòng)流暢性的優(yōu)化呢
優(yōu)化方案
對(duì)象創(chuàng)建? 預(yù)排班 等操作放入子線程 可以節(jié)省一定的時(shí)間
預(yù)渲染 異步繪制?
紋理渲染? :盡量避免 離屏渲染 同時(shí)可以依托CPU的異步繪制 減輕 GPU的壓力
視圖混合? :減輕視圖的層級(jí)的復(fù)制性 就可以減輕GPU的壓力