1. 程式人生 > >Hierarchy View常見問題收集

Hierarchy View常見問題收集

Hierarchy View 在Android SDK裡自帶,常用來檢視介面的檢視結構是否過於複雜,用於瞭解哪些檢視過度繪製,又該如何進行改進。
首先還是簡單的介紹下使用方法
通過開啟Android Device Monitor,新增hierarchyviewer檢視

連結裝置,啟動你要除錯的app,選擇你要獲取Tree View的Activity,最後點選Load View Hierarchy

選擇一個節點,就可以獲取到佈局繪製的時間,如圖:

這裡我們主要關注下面的三個圓圈,從左到右依次,代表View的Measure, Layout和Draw的效能,不同顏色代表不同的效能等級:
-  綠: 表示該View的此項效能比該View Tree中超過50%的View都要快;例如,一個綠點的測量時間意味著這個檢視的測量時間快於樹中的檢視物件的50%。
- 黃: 表示該View的此項效能比該View Tree中超過50%的View都要慢;例如,一個黃點佈局意味著這種觀點有較慢的佈局時間超過50%的樹檢視物件。
- 紅: 表示該View的此項效能是View Tree中最慢的;例如,一個紅點的繪製時間意味著花費時間最多的這一觀點在樹上畫所有的檢視物件。


但我們在使用過程中可能會遇到一些檔案,現在就把我遇到的問題和一些解決的方法列一下

 一、HierarchyViewer不能連線真機的問題

[hierarchyviewer]Unable to get view server version from device 00856cd5d08d2409
[hierarchyviewer]Unable to get view server protocol version from device 00856cd5d08d2409
[ViewServerDevice]Unable to debug device: lge-nexus_4-00856cd5d08d2409
[hierarchyviewer]Missing forwarded port for 00856cd5d08d2409
[hierarchyviewer]Unable to get the focused window from device 00856cd5d08d2409


Android系統出於安全考慮,Hierarchy Viewer只能連線開發版手機或模擬器,我們普通的商業手機是無法連上的(老版本的Hierarchy Viewer可以),這一限制在
frameworks/base/services/java/com/android/server/wm/WindowManageService.java
解決方法
Shell 

adb shell service call window 3


若返回值是:Result: Parcel(00000000 00000000 '........') 說明View Server處於關閉狀態
若返回值是:Result: Parcel(00000000 00000001 '........') 說明View Server處於開啟狀態

若是一臺可以開啟View Server的手機,我們可以使用以下命令開啟View Server:

adb shell service call window 1 i32 4939


使用以下命令關閉View Server:
 

adb shell service call window 2 i32 4939


二、無法獲取Measure、Layout、Draw的時間


有時候當我們連結真機後獲取viewtree之後出現下圖的情況,無法獲取時間

解決方法
選中你要獲取時間的節點,然後點選"Profile Node"

如果你獲取了Tree View這裡會是高亮的,我的這個截圖是沒獲取Tree View時的。

參考:http://blog.csdn.net/swordgirl2011/article/details/52887925
參考:http://blog.csdn.net/wangjia55/article/details/38121281