Hierarchy Viewer
是咱們平時開發中經常使用的工具,經過它咱們能夠獲得某個界面中的佈局層次,今天咱們來介紹一下如何使用這個工具來優化佈局。html
Hierarchy
工具位於SDK/tools
目錄下,直 接運行以後咱們會獲得下面這個界面: android
Load View Hierarchy
Inspect Screenshot
由於主要是討論如何用它來分析性能問題,因此咱們主要介紹第一個功能。工具
Hierarchy
分析在Hierarchy Viewer
的根界面,它列出了當前手機或者模擬器中可見的Window
,假如咱們要分析某個Activity
,那麼點擊它,再點擊Load View Hierarchy
後,就會獲得下面這個界面: 佈局
Tree View
這裏面將Activity
的全部View
呈現成爲一個樹形結構,它提供瞭如下幾種操做方式:
View
的id
來迅速定位到須要分析的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
的窗口。性能
對於Tree View
中的每一個節點,咱們能夠得到如下信息:優化
View
的類名View
所存儲的地址View
的id
屬性值View
繪製的相對耗時分析,它會根據measure/layout/draw
這三個階段,分爲三個小點展現,而小點的顏色就表明了它在這個階段相對於View
樹中的其餘View
在同一階段的耗時對比結果:50%
50%
View
處於它的父容器的index
。若是咱們選擇了一個View
,那麼會有更加詳細的信息: ui
View
和它的子View
在當前在屏幕上的結果。View
的子View
個數。View
各繪製階段耗時,單位爲ms
,包括了它本身和它的子View
的耗時。上面咱們看到Hierarchy View
能夠獲得繪製階段的耗時,這些耗時是在上一次繪製的時候計算出的,咱們也能夠經過這個工具主動地觸發重繪,以獲得最新的結果,操做步驟爲:.net
View
invalidate
把這個View
標記爲須要重繪,那麼在下次請求繪製的時候就會重繪它。request layout
,來發起一次請求,這樣它和它的子View
以及須要重繪的View
都會從新執行三個過程。Hierarchy View
對於咱們平時開發中的做用主要是如下幾點:debug
View
樹保持扁平。measure、layout、draw
當中那些紅色或者黃色的節點,可是因爲這些節點的顏色是包含了它和它的子View
的時間,所以咱們分析的時候,須要根據具體狀況看到底是因爲ViewGroup
的子View
過多,仍是View
過於複雜引發的這一問題。今天主要介紹了Hierarchy Viewer
和分析性能有關的用法,若是對於Inspect Screenshot
有興趣的同窗能夠查看下面官方文檔的其它部分:調試
http://android.xsoftlab.net/tools/debugging/debugging-ui.html