如果你的某個操作花費時間是24ms,系統在得到vsync訊號的時候就無法進行正常渲染,這樣就發生了丟幀現象。那麼使用者在32ms內看到的會是同一幀畫面。
使用者容易在 ui 執行動畫或者滑動 listview 的時候感知到卡頓不流暢,是因為這裡的操作相對複雜,容易發生丟幀的現象,從而感覺卡頓。有很多原 因可以導致丟幀,也許是因為你的 layout 太過複雜,無法在16ms內完成渲染,有可能是因為你的 ui 上有層疊太多的繪製單元,還有可能是因為動畫執行的次數過多。這些都會導致cpu或者gpu負載過重。
對於上面提到的 cup 和 gpu,就需要我們了解 android 的渲染機制,android 的渲染主要分為兩個元件:
他們主要的工作是:
渲染操作通常依賴於兩個核心元件:cpu 與 gpu。cpu負責包括 measure,layout,record,execute 的計算操作,把 ui 元件計算成polygons,texture紋理,然後交給gpu進行柵格化渲染。。cpu 通常存在的問題的原因是存在非必需的檢視元件,它不僅僅會帶來重複的計算操作,而且還會占用額外的 gpu 資源;gpu 通常存在的問題的原因是存在過度繪製。
activity 如何將複雜的ui轉換成使用者看得懂的影象並繪製到螢幕上?
這是由格柵化操作完成的,所謂的柵格化就是繪製那些 button,shape,path,string,bitmap 等元件最基礎的操作。它把那些元件拆分到不同的畫素上進行顯示,說的俗氣一點,就是解決那些複雜的 xml 布局檔案和標記語言,使之轉化成使用者能看懂的影象,但是這不是直接轉換的,xml 布局檔案需要在 cpu 中首先轉換為多邊形或者紋理,然後再傳遞給 gpu 進行柵格化。
說完了概念,繼續分析上圖,如何對 cpu 和 gpu 進行優化呢?
到這裡,你可能對 ui 優化還是不太理解,畢竟概念是枯燥的,下面我們就深入研究優化。
Android UI效能優化 Overdraw
什麼是overdraw?overdraw就是螢幕上某個畫素點在同一幀被繪製了多次。在多層布局結構中,不可見部分也會被繪製。舉個例子,乙個白色頁面上有乙個按鈕。系統首先繪製白色背景,然後在白色背景上繪製按鈕,最後在按鈕背景上繪製按鈕內容。那麼按鈕和按鈕內容就造成了overdraw。其實overdraw...
Android UI效能優化(渲染)
谷歌05年初發布效能優化典範,是的開發者學會如何去識別 診斷 解決安卓應用開發中所存在的效能問題。首當其衝的便是渲染的效能優化。在正常的開發中,可以移除不必要的background,以減少繪製的程度。如設定了主布局檔案的背景顏色,就可以移除listview以及listview的items中的一些ba...
Android UI效能優化 過度繪製篇
每過幾年,就會有傳聞說某個博物館在用x光掃瞄一副無價的名畫之後,發現畫作的作者其實重用了老的畫布,在名畫的底下還藏著另一副沒有被發現的畫作。有時候,博物館還能用高階的影象技術來還原畫布上的原作。android裡面的view的繪製就是類似的情況。當android系統繪製螢幕的時候,先畫父view,然後...