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