Android性能優化之佈局優化

合理的佈局可以在提升性能的同時,簡化邏輯的複雜度。工具

目標

在知足需求的狀況下,使用最少的層次結構來構建佈局,同時避免在過分重繪模式下出現粉紅色和紅色。佈局

方法

佈局優化的方式有不少,下面咱們進行一一介紹:post

刪除沒必要要的背景

對於一款APP而言,UI一般會給出一個UI標準,其中包括頁面默認背景,進入/退出動畫等,因此咱們能夠在主題中設置Activity的背景,這樣可避免在佈局文件中設置背景。性能

PS:固然,將主題的背景設置爲透明,在佈局文件中設置背景也可較少重繪次數,可是這種方案在低端機上可能出現頁面切換時可看到桌面的狀況。優化

減小布局的層次結構

多使用RelativeLayout。雖然LinearLayout比較好用,可是侷限性也比較大,實現複雜的佈局須要嵌套多層結構纔可實現。因此對於非線性的佈局,都推薦使用RelativeLayout來實現,同時應儘量避免RelativeLayout的嵌套。動畫

使用RelativeLayout的時候須要注意,因爲元素之間採用的是相對位置,因此做爲被依賴的元素,必定不能在代碼中使用GONE來隱藏處理,而應該使用不經常使用的INVISIBLE來實現隱藏。INVISIBLE與GONE的區別是INVISIBLE雖然隱藏了,但依然佔據空間。編碼

固然,還有更強大的佈局容器——ConstraintLayout, 這是Google 2016年I/O大會上提出的一個可靈活控制子View的位置和大小的容器,能夠說集LinearLayout和RelativeLayout的優勢於一身,使用一層結構也可實現複雜的佈局,真正作到了扁平化。這也是Google推薦的佈局容器,Android Studio2.3以後建立的佈局默認容器就是它。具體的使用可參考:ConstraintLayout使用指南spa

簡化動畫

在APP的開發中,爲了提升用戶的體驗,UI一般會要求添加一些動畫,可是有些動畫須要多層佈局來實現。這時可和UI協商是否可簡化動畫,以減小布局層次。在須要動畫的佈局中使用FrameLayout是一個不錯的選擇,畢竟Material Design的核心就是層次化的佈局結構。code

match_parent與wrap_content:

在寫佈局文件時,有些狀況下match_parent與wrap_content均可實現需求,這時可優先使用match_parent,熟悉View的measure就會知道,match_parent的實現邏輯比wrap_content要簡單不少。xml

使用< merge >標籤

使用標籤合併佈局。有幾點須要注意:

  1. 標籤必須是根節點,不然會拋出InflateException異常;

  2. 所代替的標籤不須要設置padding,backgound,gravity等屬性,不然合併後沒法實現相應的需求;

  3. 代替的標籤和包含的標籤應相同,不然佈局合併後將會顯示異常。好比標籤代替的是LinearLayout,那麼include這個佈局的也應該爲LinearLayout,這樣佈局才能正常顯示。

main.xml

<LinearLayout ...>
    <include layout="@layout/item_layout">
</LinearLayout>
複製代碼

item_layout.xml

<LinearLayout ...>
    <TextView ...>
    <TextView ...>
</LinearLayout>
複製代碼

此時可以使用標籤對佈局進行簡化:

<merge>
    <TextView ...>
    <TextView ...>
</merge>
複製代碼

使用標籤

使用ViewStub延遲加載佈局。在開發過程當中,有些佈局須要在點擊時纔出現,這時就可採用ViewStub來延遲加載,以提升佈局的渲染速度。

使用標籤

標籤只是用於佈局複用,從而簡化佈局的視覺效果,方便後期維護,對於性能方面幾乎沒什麼影響。因此這個標籤只是提一下,複用佈局時可以使用。

建議

  • 編寫佈局文件時多思考,選擇合適的Layout進行佈局,以儘量減小布局層次;

  • 多使用Lint工具進行檢查,Lint工具可對佈局提出不少中肯的建議,包括多餘的層次,硬編碼等;

  • 佈局寫好以後打開開發者模式下的「顯示過渡重繪區域」開關,檢查佈局的重繪狀況,以便於進一步的優化;

  • 使用Hierarchy分析佈局結構。Android Studio->Tools->Android->Android Device Monitor->Window->Open Perspective->選擇Hierarchy View肯定便可打開Hierarchy窗口。須要注意的是:Hierarchy只能在開發版的手機上使用。

總結

靈活使用上面提到的幾種優化方式,在開發過程當中,基本上全部的佈局均可在顯示過渡重繪區域的狀況下避免出現紅色,甚至是粉紅色。

相關文章
相關標籤/搜索