一、抽象佈局標籤java
(a)<include>標籤android
include標籤經常使用於將佈局中的公共部分提取出來供其餘layout共用,以實現佈局模塊化,這在佈局編寫方便提供了大大的便利。緩存
<include>標籤惟一須要的屬性是layout屬性,指定須要包含的佈局文件。能夠定義android:id和android:layout_*屬性來覆蓋被引入佈局根節點的對應屬性值。注意從新定義android:id後,子佈局的頂結點i就變化了。網絡
(b)<viewstub>標籤模塊化
viewstub標籤同include標籤同樣能夠用來引入一個外部佈局,不一樣的是,viewstub引入的佈局默認不會擴張,即既不會佔用顯示也不會佔用位置,從而在解析layout時節省cpu和內存。
viewstub經常使用來引入那些默認不會顯示,只在特殊狀況下顯示的佈局,如進度佈局、網絡失敗顯示的刷新佈局、信息出錯出現的提示佈局等。工具
在java中可使用(ViewStub)findViewById(id)找到ViewStub,經過stub.inflate()展開ViewStub,而後獲得子View,隱藏直接設置GONE,建議本地化保存,下次從新展現View就不用從新Inflate佈局
(c) <merge>標籤性能
在使用了include後可能致使佈局嵌套過多,多餘沒必要要的layout節點,從而致使解析變慢,沒必要要的節點和嵌套可經過hierarchy viewer(下面佈局調優工具中有具體介紹)或設置->開發者選項->顯示佈局邊界查看。優化
merge標籤可用於兩種典型狀況:
a. 佈局頂結點是FrameLayout且不須要設置background或padding等屬性,能夠用merge代替,由於Activity內容視圖的parent view就是個FrameLayout,因此能夠用merge消除只剩一個。
b. 某佈局做爲子佈局被其餘佈局include時,使用merge看成該佈局的頂節點,這樣在被引入時頂結點會自動被忽略,而將其子節點所有合併到主佈局中。線程
二、去除沒必要要的嵌套和View節點
(1) 首次不須要使用的節點設置爲GONE或使用viewstub,(設置View 爲GONE在加載的時候不會被解析,減小系統消耗)
(2) 使用RelativeLayout代替LinearLayout
大約在Android4.0以前,新建工程的默認main.xml中頂節點是LinearLayout,而在以後已經改成RelativeLayout,由於RelativeLayout性能更優,且能夠簡單實現LinearLayout嵌套才能實現的佈局。
4.0及以上Android版本可經過設置->開發者選項->顯示佈局邊界打開頁面佈局顯示,看看是否有沒必要要的節點和嵌套。4.0如下版本可經過hierarchy viewer查看。
三、減小沒必要要的inflate
(1) 對於inflate的佈局能夠直接緩存,用所有變量代替局部變量,避免下次需再次inflate
(2) ListView提供了item緩存,固然如今用的RecyleView性能更好,建議進行替換
四、其餘點
(1)用SurfaceView或者TextureView代替普通的View
SurfaceView或TextureView能夠經過將繪圖操做移動到另外一個單獨線程上提升性能。
普通View的繪製過程都是在主線程(UI線程)中完成,若是某些繪圖操做影響性能就很差優化了,這時咱們能夠考慮使用SurfaceView和TextureView,他們的繪圖操做發生在UI線程以外的另外一個線程上。
由於SurfaceView在常規視圖系統以外,因此沒法像常規試圖同樣移動、縮放或旋轉一個SurfaceView。TextureView是Android4.0引入的,除了與SurfaceView同樣在單獨線程繪製外,還能夠像常規視圖同樣被改變。
(2)使用RenderScript
RenderScript是Adnroid3.0引進的用來在Android上寫高性能代碼的一種語言,語法給予C語言的C99標準,他的結構是獨立的,因此不須要爲不一樣的CPU或者GPU定製代碼代碼。
(3)使用OpenGL繪圖
Android支持使用OpenGL API的高性能繪圖,這是Android可用的最高級的繪圖機制,在遊戲類對性能要求較高的應用中獲得普遍使用。
Android 4.3最大的改變,就是支持OpenGL ES 3.0。相比2.0,3.0有更多的緩衝區對象、增長了新的着色語言、增長多紋理支持等等,將爲Android遊戲帶來更出色的視覺體驗。
(4)儘可能爲全部分辨率建立資源
減小沒必要要的硬件縮放,這會下降UI的繪製速度,可藉助Android asset Studio
五、佈局調優工具
(1)hierarchy viewer
hierarchy viewer能夠方便的查看Activity的佈局,各個View的屬性、measure、layout、draw的時間,若是耗時較多會用紅色標記,不然顯示綠色。
hierarchy viewer.bat位於<sdk>/tools/目錄下
(2)使用Lint
這個就不詳細解釋了