Android官方开发文档Training系列课程中文版:布局性能优化之布局层级优化
原文地址:http://android.xsoftlab.net/training/improving-layouts/index.html
引言
布局是直接影響用戶體驗的關鍵部分。如果實現的不好,那么布局很有可能會導致內存的緊張。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中的運行效果演示:
在上圖中,我們可以看到View的層級為3,并且在文本的排布上發現了一些問題。點擊每個節點我們可以看到每個階段所花費的時間(如下圖所示)。那么我們就可以很清晰的知道哪個Item在測量、排布、渲染上花費的時間最長,所以我們就需要花點時間專門對其優化。
這里我們可以看到每個階段所花費的時間:
- 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可以自動的修復一些問題,并且會對余下的問題提供一些優化建議,以便使開發者手動修復。
總結
以上是生活随笔為你收集整理的Android官方开发文档Training系列课程中文版:布局性能优化之布局层级优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软考网络规划设计师论文考察要点
- 下一篇: Pycharm安装pip pip安装第三