Android性能優(yōu)化之布局優(yōu)化

合理的布局能夠在提高性能的同時,簡化邏輯的復雜度。

目標

在滿足需求的情況下,使用最少的層次結構來構建布局,同時避免在過度重繪模式下出現(xiàn)粉紅色和紅色。

方法

布局優(yōu)化的方式有很多,下面我們進行一一介紹:

刪除不必要的背景

對于一款APP而言,UI通常會給出一個UI標準,其中包括頁面默認背景,進入/退出動畫等,所以我們可以在主題中設置Activity的背景,這樣可避免在布局文件中設置背景。

PS:當然,將主題的背景設置為透明,在布局文件中設置背景也可較少重繪次數(shù),但是這種方案在低端機上可能出現(xiàn)頁面切換時可看到桌面的情況。

減少布局的層次結構

多使用RelativeLayout。雖然LinearLayout比較好用,但是局限性也比較大,實現(xiàn)復雜的布局需要嵌套多層結構才可實現(xiàn)。所以對于非線性的布局,都推薦使用RelativeLayout來實現(xiàn),同時應盡可能避免RelativeLayout的嵌套。

使用RelativeLayout的時候需要注意,由于元素之間采用的是相對位置,所以作為被依賴的元素,一定不能在代碼中使用GONE來隱藏處理,而應該使用不常用的INVISIBLE來實現(xiàn)隱藏。INVISIBLE與GONE的區(qū)別是INVISIBLE雖然隱藏了,但依然占據(jù)空間。

當然,還有更強大的布局容器——ConstraintLayout, 這是Google 2016年I/O大會上提出的一個可靈活控制子View的位置和大小的容器,可以說集LinearLayout和RelativeLayout的優(yōu)點于一身,使用一層結構也可實現(xiàn)復雜的布局,真正做到了扁平化。這也是Google推薦的布局容器,Android Studio2.3之后創(chuàng)建的布局默認容器就是它。

簡化動畫

在APP的開發(fā)中,為了提高用戶的體驗,UI通常會要求添加一些動畫,但是有些動畫需要多層布局來實現(xiàn)。這時可和UI協(xié)商是否可簡化動畫,以減少布局層次。在需要動畫的布局中使用FrameLayout是一個不錯的選擇,畢竟Material Design的核心就是層次化的布局結構。

match_parent與wrap_content:

在寫布局文件時,有些情況下match_parent與wrap_content都可實現(xiàn)需求,這時可優(yōu)先使用match_parent,熟悉View的measure就會知道,match_parent的實現(xiàn)邏輯比wrap_content要簡單很多。

使用< merge >標簽

使用標簽合并布局。有幾點需要注意:

  1. 標簽必須是根節(jié)點,否則會拋出InflateException異常;

  2. 所代替的標簽不需要設置padding,backgound,gravity等屬性,否則合并后無法實現(xiàn)相應的需求;

  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延遲加載布局。在開發(fā)過程中,有些布局需要在點擊時才出現(xiàn),這時就可采用ViewStub來延遲加載,以提高布局的渲染速度。

使用標簽

標簽只是用于布局復用,從而簡化布局的視覺效果,方便后期維護,對于性能方面幾乎沒什么影響。所以這個標簽只是提一下,復用布局時可使用。

建議

  • 編寫布局文件時多思考,選擇合適的Layout進行布局,以盡可能減少布局層次;

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

  • 布局寫好之后打開開發(fā)者模式下的“顯示過渡重繪區(qū)域”開關,檢查布局的重繪情況,以便于進一步的優(yōu)化;

  • 使用Hierarchy分析布局結構。Android Studio->Tools->Android->Android Device Monitor->Window->Open Perspective->選擇Hierarchy View確定即可打開Hierarchy窗口。需要注意的是:Hierarchy只能在開發(fā)版的手機上使用。

總結

靈活使用上面提到的幾種優(yōu)化方式,在開發(fā)過程中,基本上所有的布局都可在顯示過渡重繪區(qū)域的情況下避免出現(xiàn)紅色,甚至是粉紅色。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容