性能優(yōu)化工具知識(shí)梳理(1) - TraceView
性能優(yōu)化工具知識(shí)梳理(2) - Systrace
性能優(yōu)化工具知識(shí)梳理(3) - 調(diào)試GPU過(guò)度繪制 & GPU呈現(xiàn)模式分析
性能優(yōu)化工具知識(shí)梳理(4) - Hierarchy Viewer
性能優(yōu)化工具知識(shí)梳理(5) - MAT
性能優(yōu)化工具知識(shí)梳理(6) - Memory Monitor & Heap Viewer & Allocation Tracker
性能優(yōu)化工具知識(shí)梳理(7) - LeakCanary
性能優(yōu)化工具知識(shí)梳理(8) - Lint
一俺附、概述
Hierarchy Viewer
是我們平時(shí)開(kāi)發(fā)中常用的工具匀泊,通過(guò)它我們可以得到某個(gè)界面中的布局層次帅霜,今天我們來(lái)介紹一下如何使用這個(gè)工具來(lái)優(yōu)化布局。
Hierarchy
工具位于SDK/tools
目錄下搀崭,直
接運(yùn)行之后我們會(huì)得到下面這個(gè)界面:
它提供了下面兩個(gè)功能:
Load View Hierarchy
Inspect Screenshot
因?yàn)橹饕怯懻撊绾斡盟鼇?lái)分析性能問(wèn)題桐款,所以我們主要介紹第一個(gè)功能阳柔。
二没酣、Hierarchy
分析
2.1 整體布局分析
在Hierarchy Viewer
的根界面,它列出了當(dāng)前手機(jī)或者模擬器中可見(jiàn)的Window
忆矛,假如我們要分析某個(gè)Activity
察蹲,那么點(diǎn)擊它,再點(diǎn)擊Load View Hierarchy
后催训,就會(huì)得到下面這個(gè)界面:
這個(gè)界面一共分為四個(gè)部分洽议,它們分別是:
-
Tree View
這里面將Activity
的所有View
呈現(xiàn)成為一個(gè)樹(shù)形結(jié)構(gòu),它提供了以下幾種操作方式:- 通過(guò)拖動(dòng)條來(lái)放大或縮小可視范圍漫拭。
- 通過(guò)輸入類(lèi)名或者
View
的id
來(lái)迅速定位到需要分析的View
- 通過(guò)上方的
Save as PNG
或者Capture Layers
保存當(dāng)前的樹(shù)形結(jié)構(gòu)绞铃。
-
Tree Overview
這相當(dāng)于是Tree View
的縮小版,可以通過(guò)它快速查看或者定位嫂侍。 -
Properties View
當(dāng)我們選取了一個(gè)View
的時(shí)候儿捧,它會(huì)列出對(duì)應(yīng)View
的屬性荚坞。 -
Layout View
當(dāng)我們選取了一個(gè)View
之后,會(huì)在這個(gè)區(qū)域內(nèi)菲盾,顯示出不同顏色的矩形框颓影,其中紅色就是我們選取的View
的范圍,而淡紅色則是該View
對(duì)應(yīng)的父容器的范圍懒鉴,其它的白色矩形框既不是該View
的父容器诡挂,也不是該View
的子控件。
需要注意临谱,當(dāng)Window
的布局變化時(shí)璃俗,是不會(huì)主動(dòng)刷新的,如果我們想要查看最新的布局情況悉默,那么就要點(diǎn)擊上方的Load View Hierarchy
來(lái)刷新城豁,而如果我們想要去查看別的Window
布局,那么就需要點(diǎn)擊下方操作欄最左邊的按鈕抄课,重新進(jìn)入選擇Window
的窗口唱星。
2.2 單個(gè)布局元素分析
對(duì)于Tree View
中的每個(gè)節(jié)點(diǎn),我們可以獲得以下信息:
-
View
的類(lèi)名 -
View
所存儲(chǔ)的地址 -
View
的id
屬性值 -
View
繪制的相對(duì)耗時(shí)分析跟磨,它會(huì)根據(jù)measure/layout/draw
這三個(gè)階段间聊,分為三個(gè)小點(diǎn)展示,而小點(diǎn)的顏色就代表了它在這個(gè)階段相對(duì)于View
樹(shù)中的其他View
在同一階段的耗時(shí)對(duì)比結(jié)果: - 綠色:在前
50%
- 黃色:在后
50%
- 紅色:耗時(shí)最長(zhǎng)
-
View
處于它的父容器的index
抵拘。
如果我們選擇了一個(gè)View
哎榴,那么會(huì)有更加詳細(xì)的信息:
-
View
和它的子View
在當(dāng)前在屏幕上的結(jié)果。 -
View
的子View
個(gè)數(shù)僵蛛。 -
View
各繪制階段耗時(shí)尚蝌,單位為ms
,包括了它自己和它的子View
的耗時(shí)墩瞳。
2.3 如何調(diào)試
上面我們看到Hierarchy View
可以得到繪制階段的耗時(shí)驼壶,這些耗時(shí)是在上一次繪制的時(shí)候計(jì)算出的氏豌,我們也可以通過(guò)這個(gè)工具主動(dòng)地觸發(fā)重繪喉酌,以得到最新的結(jié)果,操作步驟為:
- 選取一個(gè)
View
- 點(diǎn)擊窗口上方的
invalidate
把這個(gè)View
標(biāo)記為需要重繪泵喘,那么在下次請(qǐng)求繪制的時(shí)候就會(huì)重繪它泪电。 - 點(diǎn)擊窗口上方的
request layout
,來(lái)發(fā)起一次請(qǐng)求纪铺,這樣它和它的子View
以及需要重繪的View
都會(huì)重新執(zhí)行三個(gè)過(guò)程相速。
2.4 如何優(yōu)化
Hierarchy View
對(duì)于我們平時(shí)開(kāi)發(fā)中的作用主要是以下幾點(diǎn):
- 查看整個(gè)布局的深度,是否可以去掉一些不必要的層級(jí)鲜锚,以盡量使
View
樹(shù)保持扁平突诬。 - 查看
measure苫拍、layout、draw
當(dāng)中那些紅色或者黃色的節(jié)點(diǎn)旺隙,但是由于這些節(jié)點(diǎn)的顏色是包含了它和它的子View
的時(shí)間绒极,因此我們分析的時(shí)候,需要根據(jù)具體情況看究竟是由于ViewGroup
的子View
過(guò)多蔬捷,還是View
過(guò)于復(fù)雜引起的這一問(wèn)題垄提。
三、小結(jié)
今天主要介紹了Hierarchy Viewer
和分析性能有關(guān)的用法周拐,如果對(duì)于Inspect Screenshot
有興趣的同學(xué)可以查看下面官方文檔的其它部分:
http://android.xsoftlab.net/tools/debugging/debugging-ui.html
更多文章铡俐,歡迎訪(fǎng)問(wèn)我的 Android 知識(shí)梳理系列:
- Android 知識(shí)梳理目錄:http://www.reibang.com/p/fd82d18994ce