注:本文內(nèi)容是《Android 群英傳》學習筆記,主要提煉書中內(nèi)容然后加上部分自己的完善和補充。
android 渲染機制
- 16ms :1000ms在顯示60幀畫面的單位時間。系統(tǒng)通過VSYNC信號出發(fā)對UI的渲染、重繪。
- 檢測UI渲染時間工具
- 開發(fā)者選項->Profile GPU Rendering(GPU配置未見)->On the screen as bars(以條的形式顯示與屏幕)
- 每一條柱狀先都包含三部分
- 藍色代表測量繪制Display List的時間,
- 紅色代表OpenGL渲染Display List 所需要的時間
- 黃色代表CPU等待GPU處理的時間。
- 中間的綠色橫線代表VSYNC時間16ms
- 需要盡量將所有條形圖都控制在這條綠線之下。
避免Overdraw
避免Overdraw ,開發(fā)者選項中有一個檢測工具(Enable GPU Overdraw 調(diào)試GPU過度軒渲染),減少紅色區(qū)域,增加藍色區(qū)域。
優(yōu)化布局層次
Google建議View 的高度不應超過10層,避免嵌套過多。
ViewStub 實現(xiàn)view的延遲加載
- ViewStub默認不加載
- 兩種方式顯示通過ViewStub 加載顯示的View
mViewStub = (ViewStub)findViewById(R.id.viewstub); mViewStub.setVisiable(View.VISIABLE);-
View inflateView = mViewStub.inflate();
區(qū)別是inflate()方法可以返回引用的布局,可以通過findViewById 找到layout加載的空間。兒不管使用哪種方式,一旦<ViewStub>被設置為可見或者inflate了,<ViewStub>就不存在了。并將這個Layout 的ID重新設置為<ViewStub>中通過android:inflateId屬性所指定的ID。