Hierarchy View常见问题收集

本文详细介绍了HierarchyView在Android开发中的应用,包括如何检查界面视图结构、评估视图性能,以及解决连接真机和获取视图时间的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.youkuaiyun.com/swordgirl2011/article/details/52887925
参考:http://blog.youkuaiyun.com/wangjia55/article/details/38121281

Applications Graphics Acceleration Info: Uptime: 1039463 Realtime: 1039463 ** Graphics info for pid 3525 [com.google.android.youtube.tv] ** Stats since: 934718499361ns Total frames rendered: 0 Janky frames: 0 (0.00%) Janky frames (legacy): 0 (0.00%) 50th percentile: 4950ms 90th percentile: 4950ms 95th percentile: 4950ms 99th percentile: 4950ms Number Missed Vsync: 0 Number High input latency: 0 Number Slow UI thread: 0 Number Slow bitmap uploads: 0 Number Slow issue draw commands: 0 Number Frame deadline missed: 0 Number Frame deadline missed (legacy): 0 HISTOGRAM: 5ms=0 6ms=0 7ms=0 8ms=0 9ms=0 10ms=0 11ms=0 12ms=0 13ms=0 14ms=0 15ms=0 16ms=0 17ms=0 18ms=0 19ms=0 20ms=0 21ms=0 22ms=0 23ms=0 24ms=0 25ms=0 26ms=0 27ms=0 28ms=0 29ms=0 30ms=0 31ms=0 32ms=0 34ms=0 36ms=0 38ms=0 40ms=0 42ms=0 44ms=0 46ms=0 48ms=0 53ms=0 57ms=0 61ms=0 65ms=0 69ms=0 73ms=0 77ms=0 81ms=0 85ms=0 89ms=0 93ms=0 97ms=0 101ms=0 105ms=0 109ms=0 113ms=0 117ms=0 121ms=0 125ms=0 129ms=0 133ms=0 150ms=0 200ms=0 250ms=0 300ms=0 350ms=0 400ms=0 450ms=0 500ms=0 550ms=0 600ms=0 650ms=0 700ms=0 750ms=0 800ms=0 850ms=0 900ms=0 950ms=0 1000ms=0 1050ms=0 1100ms=0 1150ms=0 1200ms=0 1250ms=0 1300ms=0 1350ms=0 1400ms=0 1450ms=0 1500ms=0 1550ms=0 1600ms=0 1650ms=0 1700ms=0 1750ms=0 1800ms=0 1850ms=0 1900ms=0 1950ms=0 2000ms=0 2050ms=0 2100ms=0 2150ms=0 2200ms=0 2250ms=0 2300ms=0 2350ms=0 2400ms=0 2450ms=0 2500ms=0 2550ms=0 2600ms=0 2650ms=0 2700ms=0 2750ms=0 2800ms=0 2850ms=0 2900ms=0 2950ms=0 3000ms=0 3050ms=0 3100ms=0 3150ms=0 3200ms=0 3250ms=0 3300ms=0 3350ms=0 3400ms=0 3450ms=0 3500ms=0 3550ms=0 3600ms=0 3650ms=0 3700ms=0 3750ms=0 3800ms=0 3850ms=0 3900ms=0 3950ms=0 4000ms=0 4050ms=0 4100ms=0 4150ms=0 4200ms=0 4250ms=0 4300ms=0 4350ms=0 4400ms=0 4450ms=0 4500ms=0 4550ms=0 4600ms=0 4650ms=0 4700ms=0 4750ms=0 4800ms=0 4850ms=0 4900ms=0 4950ms=0 50th gpu percentile: 4950ms 90th gpu percentile: 4950ms 95th gpu percentile: 4950ms 99th gpu percentile: 4950ms GPU HISTOGRAM: 1ms=0 2ms=0 3ms=0 4ms=0 5ms=0 6ms=0 7ms=0 8ms=0 9ms=0 10ms=0 11ms=0 12ms=0 13ms=0 14ms=0 15ms=0 16ms=0 17ms=0 18ms=0 19ms=0 20ms=0 21ms=0 22ms=0 23ms=0 24ms=0 25ms=0 4950ms=0 Pipeline=Skia (OpenGL) Memory policy: Max surface area: 2073600 Max resource usage: 99.53MB (x48) Background retention: 50% (altUiHidden = true) GPU Context timeout: 10 Contexts: 0 (stopped = 0) No GrContext; however 1 remaining Vulkan refs Profile data in ms: com.google.android.youtube.tv/com.google.android.apps.youtube.tv.activity.MainActivity/android.view.ViewRootImpl@3e7df28 (visibility=0) View hierarchy: com.google.android.youtube.tv/com.google.android.apps.youtube.tv.activity.MainActivity/android.view.ViewRootImpl@3e7df28 9 views, 9.07 kB of render nodes Total ViewRootImpl : 1 Total attached Views : 9 Total RenderNode : 9.07 kB (used) / 9.07 kB (capacity) 讲解一下
最新发布
08-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值