開篇廢話
我們平時在做UI布局優(yōu)化的時候褥影,時常提起的一個工具Hierarchy Viewer,它提供了一個很直觀的可視化界面來觀測布局界面的層級泛烙,可以檢查布局層次結構中每個視圖的屬性和布局速度檬果。它可以幫助我們查找由視圖層次結構導致的性能瓶頸浅缸,從而幫助我們簡化層次結構并減少過度繪制(Overdraw)的問題
歡迎訪問我的個人博客:senduo's blog
技術詳情
我們從以下幾個步驟來講述Hierarchy Viewer工具的使用:
第一步:開啟Hierarchy View的工作界面
第二步:檢測移動設備(虛擬機)的View Server是否開啟
第三步:移動設備開啟某個需要檢測的界面软吐,Hierarchy View 加載該界面視圖
第四步:工具熟悉
第一步:開啟Hierarchy Viewer的工作界面
針對Android Studio 2.x版本系列:
在Android Stduio的菜單欄依次點擊:
Tools>Android>Android Device Monitor

點擊后现喳,稍等一會會彈出一個界面:

選擇Hierarchy View之后呛梆,我們就能看到Hierarchy View工具的工作界面了:

第二步:檢測移動設備(虛擬機)的View Server是否開啟
當移動設備正確連接PC之后锐涯,使用adb指令在命令行里面輸入:
adb shell service call window 3
如果提示adb不是內部指令的話,記得進行配置環(huán)境變量填物,將platform-tools里面的adb.exe路徑配置到Path中去(Windows環(huán)境纹腌,其他系統的類似)
執(zhí)行后

若返回值是:Result: Parcel(00000000 00000000 '........') 說明View Server處于關閉狀態(tài)霎终。
若返回值是:Result: Parcel(00000000 00000001 '........') 說明View Server處于開啟狀態(tài)。
如果是一臺可以打開View Service Android設備(Android開發(fā)版手機升薯,模擬器,注意版本要在Android4.1及以上哈)可以用以下命令操作View Server
打開View Server命令:
adb shell service call window 1 i32 4939
關閉View Server命令:
adb shell service call window 2 i32 4939

第三步:移動設備開啟某個需要檢測的界面莱褒,Hierarchy View 加載該界面視圖
當命令行顯示了Result: Parcel(00000000 00000001 '........'),重新打開一下Android Device Monitor,然后點擊Load view按鈕,就能加載界面的一個視圖了:

如果點擊加載視圖按鈕沒有看到右邊的圖的話涎劈,把Android Device Monitor整個界面先關掉广凸,然后將View Server先關閉,再查看是否關閉蛛枚,沒有關閉谅海,就多運行幾次關閉指令
關閉View Server命令:
adb shell service call window 2 i32 4939
然后運行開啟View Server,知道開啟了View Server,再重新打開Android Device Monitor,依然不行,就重復多次蹦浦,如果三四次之后還是不行扭吁,那問題就另當別論了哈
第四步:工具熟悉
Tree View(中心):顯示視圖層次結構。您可以使用鼠標拖動并放大盲镶,底部的縮放控件侥袜。每個節(jié)點表示它的View類名和ID名稱。
Tree Overview(右上):為您的應用程序的完整視圖層次結構提供鳥瞰圖溉贿。移動灰色矩形以更改樹視圖中可見的視口枫吧。
Layout View(右下角):顯示布局的線框視圖。當前所選視圖的輪廓為紅色顽照,其父視圖為淺紅色。
三個小圓點, 依次表示Measure, Layout, Draw, 可以理解為對應View的onMeasure, onLayout, onDraw三個方法闽寡。
綠色, 表示該View的此項性能比該View Tree中超過50%的View都要快代兵。
黃色, 表示該View的此項性能比該View Tree中超過50%的View都要慢。
紅色, 表示該View的此項性能是View Tree中最慢的
界面中出現的紅色圈圈多了爷狈,我們就要注意了:
Measure紅點, 可能是布局中嵌套RelativeLayout, 或是嵌套LinearLayout都使用了weight屬性
Layout紅點, 可能是布局層級太深植影。
Draw紅點, 可能是自定義View的繪制有問題, 復雜計算等。
干貨總結
這篇文章是為了下一篇的UI布局優(yōu)化做的一個準備涎永,因為思币,在UI布局優(yōu)化中,這個工具一般是少不了的羡微,在我們實際生產中谷饿,也是非常有用的一個工具,所以妈倔,我們需要好好了解這個工具博投。
本篇內容使用的環(huán)境為Windows7 + Android Studio + Genymotion虛擬機 2.3.3,所以如果用Eclipse的小伙伴有點不適用這個,不過盯蝴,原理差不多毅哗,adb指令也是一樣听怕,具體得自身去嘗試了,畢竟Android Studio工具是google推薦的虑绵,屬于正宮娘娘
此篇中暫時沒有提及真機版移動設備使用Hierarchy View 這個工具尿瞭,因為google處于安全層面的考慮,真機無法開啟View Server這個服務翅睛,不過還是有方法可以使用声搁,只是稍微麻煩一點,我這里就不進行贅述了宏所。