Android性能優化典範——渲染性能(Render Performance)

從設計師的角度,他們希望App能夠有更多的動畫,圖片等時尚元素來實現流暢的用戶體驗。從用戶的角度,他們希望App能夠在操作中入Dove般絲滑,然而有些App或者其中的某些頁面(比如列表頁),或者那些需要複雜的渲染操作的界面。會在操作的過程中產生Android系統無法及時完成這些複雜的操作,因此而產生卡頓等性能問題,這些問題的產生主要根源都是因爲渲染性能。
12fps大概類似手動快速翻動書籍的幀率,這明顯是可以感知到不夠順滑的。24fps使得人眼感知的是連續線性的運動,這其實是歸功於運動模糊的效果。24fps是電影膠圈通常使用的幀率,因爲這個幀率已經足夠支撐大部分電影畫面需要表達的內容,同時能夠最大的減少費用支出。但是低於30fps是無法順暢表現絢麗的畫面內容的,而且人眼與大腦之間的協作無法感知超過60fps的畫面更新,因此App性能就以是否達到60fps來作爲衡量的標準和實現絢麗的效果。這就意味着每一幀你只有16ms=1000/60的時間來處理所有的任務。Android系統每隔16ms發出VSYNC信號,觸發對UI進行渲染,如果每次渲染都成功,這樣就能夠達到流暢的畫面所需要的60fps,爲了能夠實現60fps,這意味着程序的大多數操作都必須在16ms內完成。如果你的某個操作花費時間是24ms,系統在得到VSYNC信號的時候就無法進行正常渲染,這樣就發生了丟幀現象。那麼用戶在32ms內看到的會是同一幀畫面。
這裏寫圖片描述
用戶容易在UI執行動畫或者滑動ListView的時候感知到卡頓不流暢,是因爲這裏的操作相對複雜,容易發生丟幀的現象,從而感覺卡頓。有很多原因可以導致丟幀,也許是因爲你的layout太過複雜,無法在16ms內完成渲染,有可能是因爲你的UI上有層疊太多的繪製單元,還有可能是因爲動畫執行的次數過多。這些都會導致CPU或者GPU負載過重。
我們可以通過一些工具來定位問題,比如可以使用HierarchyViewer來查找Activity中的佈局是否過於複雜,也可以使用手機設置裏面的開發者選項,打開Show GPU Overdraw等選項進行觀察。
這裏寫圖片描述
你還可以使用TraceView來觀察CPU的執行情況,更加快捷的找到性能瓶頸。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章