Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android官方開發文檔Training系列課程中文版:布局性能優化之布局層級優化

Android官方開發文檔Training系列課程中文版:布局性能優化之布局層級優化

編輯:關於Android編程

引言

布局是直接影響用戶體驗的關鍵部分。如果實現的不好,那麼布局很有可能會導致內存的緊張。Android的SDK包含的一些工具可以用來檢查布局性能上的問題。結合本章的課程學習,你將有能力以低成本的內存開銷實現更為順暢的UI體驗。

優化布局層級

有一個常見的誤解就是使用基本的布局結構會使布局更高效。然而卻不是這樣的,每一個控件、布局容器都需要執行初始化、排布、繪制等過程。舉個例子,使用內嵌的LinearLayout會使布局層級過度加深。進一步講,內嵌多個使用了layout_weight參數的控件所花費的代價尤其高昂,因為每個子View都需要被測量兩次。這在布局被重復加載時尤為重要,比如使用在ListView或GridView中的時候。

在這節課我們將會學習如何使用Hierarchy Viewer工具及Layoutopt工具來檢查、優化布局。

布局檢查

Android的SDK包含了一個名為Hierarchy Viewer的工具。使用該工具可以幫助發現影響布局性能的瓶頸。

Hierarchy Viewer工作於所選擇的進程上,它會顯示一個布局樹。每個View節點上的信號燈代表了該View在測量、排布、繪制上的性能優劣,這可以幫助你發現潛在的問題。

舉個例子說明:下圖是ListView的一個Item。該Item左邊用於顯示圖片,而右邊則顯示兩行文本。因為該Item會被進行多次加載,所以對其優化的話,那麼UI性能會有顯著的提升。

\

Hierarchy Viewer工具位於< sdk>/tools/目錄下。打開後,Hierarchy Viewer會列出當前的可用設備以及設備上運行的組件。點擊Load View Hierarchy來浏覽所選組件的布局層級。下圖是上圖位於ListView中的運行效果演示:

\vcO/uPa917bOy/m7qLfRtcTKsbzkKMjnz8LNvMv5yr4poaPEx8O0ztLDx77Nv8nS1Lrcx+XO+rXE1qq1wMTEuPZJdGVt1Nqy4sG/oaLFxbK8oaLk1si+yc+7qLfRtcTKsbzk1+6zpKOsy/nS1M7Sw8e+zdDo0qq7qLXjyrG85Neow8W21Mbk08W7r6GjPC9wPg0KPHA+PGltZyBhbHQ9"" src="/uploadfile/Collfiles/20160913/20160913092158757.png" title="\" />

這裡我們可以看到每個階段所花費的時間:

Measure: 0.977ms Layout: 0.167ms Draw: 2.717ms

調整布局

因為上面的示例說布局的性能慢是由於內嵌了一個LinearLayout,所以改進這部分性能只能通過扁平化來處理。要盡量使布局變淺變寬,杜絕變窄變深。RelativeLayout可以實現這樣的布局。所以當使用RelativeLayout實現這樣的布局時,那麼可以看到布局的層級變為了2。我們所看到的布局圖就是這個樣子:

這裡寫圖片描述

下面是優化後的時間開銷:

Measure: 0.598ms Layout: 0.110ms Draw: 2.146ms

我們可能會看到很微小的改進。

在改進時間上的大部分差別是由於LinearLayout的權重造成的,它會降低測量的速度。這裡的示例僅僅是個優化手段的演示,在開發過程中應當認真考慮是否有必要使用權重。

使用Lint

開發者應該使用lint工具來檢查布局層級是否有可優化的地方。Lint 與Layoutopt 相比有更加強大的功能。一些Lint的檢查規則如下:

使用組合圖形 - 一個包含了ImageView和TextView的LinearLayout作為組合圖形處理起來更加高效。 合並根幀布局 - 如果一個FrameLayout是根布局,並且它沒有提供背景色或內邊距什麼的,那麼可以使用合並標簽將其替換,這可以稍微的改進性能。 無用的葉子節點 - 如果一個布局沒有子View,沒有背景色,那麼通常可以將其移除。 無用的中間節點 - 如果一個布局內部只含有一個子View,並且不是ScrollView或者根布局,也沒有背景色,那麼可以將它移除,並將其子View移動到它的父容器內。 非常深的布局嵌套 - 一個被嵌套很深的布局通常不利於性能。考慮使用RelativeLayout或者GridLayout這種扁平化布局來改進性能。默認的最大深度為10。

Lint的另一個好處就是它被集成進了Android Studio。Lint會在程序編譯時自動運行。

你也可以管理檢查Lint的配置,在Android Studio內通過File>Settings>Project Settings路徑可以找到。

\

Lint可以自動的修復一些問題,並且會對余下的問題提供一些優化建議,以便使開發者手動修復。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved