性能優化工具知識梳理(4) Hierarchy Viewer

1、概述

Hierarchy Viewer是咱們平時開發中經常使用的工具,經過它咱們能夠獲得某個界面中的佈局層次,今天咱們來介紹一下如何使用這個工具來優化佈局。html

Hierarchy工具位於SDK/tools目錄下,直 接運行以後咱們會獲得下面這個界面: android

它提供了下面兩個功能:

  • Load View Hierarchy
  • Inspect Screenshot

由於主要是討論如何用它來分析性能問題,因此咱們主要介紹第一個功能。工具

2、Hierarchy分析

2.1 總體佈局分析

Hierarchy Viewer的根界面,它列出了當前手機或者模擬器中可見的Window,假如咱們要分析某個Activity,那麼點擊它,再點擊Load View Hierarchy後,就會獲得下面這個界面: 佈局

這個界面一共分爲四個部分,它們分別是:

  • Tree View 這裏面將Activity的全部View呈現成爲一個樹形結構,它提供瞭如下幾種操做方式:
    • 經過拖動條來放大或縮小可視範圍。
    • 經過輸入類名或者Viewid來迅速定位到須要分析的View
    • 經過上方的Save as PNG或者Capture Layers保存當前的樹形結構。
  • Tree Overview 這至關因而Tree View的縮小版,能夠經過它快速查看或者定位。
  • Properties View 當咱們選取了一個View的時候,它會列出對應View的屬性。
  • Layout View 當咱們選取了一個View以後,會在這個區域內,顯示出不一樣顏色的矩形框,其中紅色就是咱們選取的View的範圍,而淡紅色則是該View對應的父容器的範圍,其它的白色矩形框既不是該View的父容器,也不是該View的子控件。

須要注意,當Window的佈局變化時,是不會主動刷新的,若是咱們想要查看最新的佈局狀況,那麼就要點擊上方的Load View Hierarchy來刷新,而若是咱們想要去查看別的Window佈局,那麼就須要點擊下方操做欄最左邊的按鈕,從新進入選擇Window的窗口。性能

2.2 單個佈局元素分析

對於Tree View中的每一個節點,咱們能夠得到如下信息:優化

  • View的類名
  • View所存儲的地址
  • Viewid屬性值
  • View繪製的相對耗時分析,它會根據measure/layout/draw這三個階段,分爲三個小點展現,而小點的顏色就表明了它在這個階段相對於View樹中的其餘View在同一階段的耗時對比結果
  • 綠色:在前50%
  • 黃色:在後50%
  • 紅色:耗時最長
  • View處於它的父容器的index

若是咱們選擇了一個View,那麼會有更加詳細的信息: ui

  • View和它的子View在當前在屏幕上的結果。
  • View的子View個數。
  • View各繪製階段耗時,單位爲ms,包括了它本身和它的子View的耗時。

2.3 如何調試

上面咱們看到Hierarchy View能夠獲得繪製階段的耗時,這些耗時是在上一次繪製的時候計算出的,咱們也能夠經過這個工具主動地觸發重繪,以獲得最新的結果,操做步驟爲:.net

  • 選取一個View
  • 點擊窗口上方的invalidate把這個View標記爲須要重繪,那麼在下次請求繪製的時候就會重繪它。
  • 點擊窗口上方的request layout,來發起一次請求,這樣它和它的子View以及須要重繪的View都會從新執行三個過程。

2.4 如何優化

Hierarchy View對於咱們平時開發中的做用主要是如下幾點:debug

  • 查看整個佈局的深度,是否能夠去掉一些沒必要要的層級,以儘可能使View樹保持扁平。
  • 查看measure、layout、draw當中那些紅色或者黃色的節點,可是因爲這些節點的顏色是包含了它和它的子View的時間,所以咱們分析的時候,須要根據具體狀況看到底是因爲ViewGroup的子View過多,仍是View過於複雜引發的這一問題。

3、小結

今天主要介紹了Hierarchy Viewer和分析性能有關的用法,若是對於Inspect Screenshot有興趣的同窗能夠查看下面官方文檔的其它部分:調試

http://android.xsoftlab.net/tools/debugging/debugging-ui.html


更多文章,歡迎訪問個人 Android 知識梳理系列:

相關文章
相關標籤/搜索