Android工具:Hierarchy Viewer

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/p106786860/article/details/70494801

一、配置Hierarchy Viewer

  1. 非root手机,Android4.0或者更低,安装和配置ViewServer(https://github.com/romainguy/ViewServer);
  2. root手机,Anddroid4.0或者更低,不需要任何配置;

Android4.1或者更高,在开发设备上设置环境变量ANDROID_HVPROTO;

二、启动Hierarchy Viewer

在ANDROID_SDK/tools目录下,执行monitor.bat启动;

D:\DevelopTools\AndroidSdk\tools>monitor.bat

Android Studio->Tools->Android->Android Device Monitor;

三、使用Hierarchy Viewer

Open Perspectives->Hierarchy View->Windows->选择你想查看的Activity->Load View Hierarchy按钮,在就会显示该Activity布局的树形结构;

  • Windows:显示了设备和模拟器的列表,展开一个设备列表,显示在该设备上当前可见UI的一系列Activity,它包含系统Activity和你的应用的Activity;
  • Tree View:Activity对象额视图结构图,使用树图来显示单个视图对象,并且查看你的UI中视图之间的关系;
  • Tree OverView:整个视图结构的缩略图,标识了Tree View中正显示的的区域;
  • Properties View:选中视图对象的属性列表;
  • Layout View:用户界面展示块,你的UI的另外一个导航,当在Tree View点击一个视图对象,在Layout View中的位置会高亮,同理点击Layout View视图会映射Tree View;
  • 缩放滑块:可以放大和缩小树形结构,鼠标点击或者拖拽的方式来查看当前不可见的视图;
  • Filter by class or id输入框:查询你想查看的视图对象,该对象会编程明亮的蓝色;
  • Save as PNG按钮:可以当前的Tree View保存为PNG图片;
  • Capture Layers按钮:保存为PSD图片(Photoshop使用),每个视图作为单独的Photoshop图层保存;
  • Reload View Hierarchy按钮:当前Activity的UI更新时Hierarchy Viewer不会自动更新,点击它更新;
    … …

在Tree View中的每个节点代表一个单独的视图,当你选择一个节点的时候,你会看家如下一些信息:

  • 视图类型:视图对象的类型,Toolbar;
  • 视图对象地址:视图对象的指针,@a7a990;
  • 视图对象id:android:id属性的值,id/action_bar;
  • 性能指示器:三个颜色点集合,代表了这个视图相对这个树种的其它视图的渲染速度,从左到有分别代表了measure,layout和draw时间;
    • 绿色:比树中所有视图50%的对象渲染更快;
    • 黄色:比树中所有视图的50%对象渲染更慢;
    • 红色:树中所有视图对象渲染最慢;
  • 视图索引:在它父视图中子视图的索引,从0开始;
  • 图片:展示该视图的真实图片,如果视图包含子视图,一起展示;
  • 视图数量:改节点代表的视图的数量,包含它自己和它的子视图的数量;
  • 渲染时间:measure,layout和draw确切的渲染时间,毫秒单位;

Hierarchy Viewer窗口可以帮你调试应用程序… …

四、Hierarchy Viewer调试

当你选择左边的根节点,高级别的视图对象重绘通常会强制子节点一起重绘;

点击invalidate按钮,标记某个视图是无效的,在下一次布局被请求的时候重绘;

在点击Request Layout按钮,这个视图和它的子视图,以及任何需要重绘的视图重绘 ;

五、Hierarchy Viewer优化

使用Hierarchy Viewer帮助你观察哪个视图渲染慢,判断这个视图是一直慢还是在某些情况下慢;
记住性能低也不一定是问题的证据,尤其是ViewGroup对象,它包含很多子视图和渲染复杂的视图会渲染更慢;

问题1:点击Hierarchy Viewer窗口的Refresh按钮,控制台出如下错误05:22:34 E/hierarchyviewer: Missing forwarded port for 8f70f7b9
05:22:34 E/hierarchyviewer: Unable to get view server protocol version from device 8f70f7b9
05:22:35 E/ViewServerDevice: Unable to debug device: oppo-x9007-8f70f7b9
分析1:Android系统出于安全考虑,Hierarchy Viewer只能连接开发版手机或模拟器,我们普通的商业手机是无法连上的(老版本的Hierarchy Viewer可以),这一限制在 frameworks/base/services/java/com/android/server/wm/WindowManageService.java。
处理1:查看配置部分描述处理,或者尝试adb kill-server,adb start-server;

问题2: Mesure:n/a、Layout:n/a和Draw:n/a
分析2:当你启动Hierarchy Viewer的时候,不是measure,layout和draw的时间,所以获取不到相关的数据;
处理2:选中你想获取的布局时间的根节点,点击obtain layout times for tree rooted at selected node按钮获取布局时间;


1.新技术,新未来!欢迎大家关注“1024工场”微信服务号,时刻关注我们的最新的技术讯息。(甭客气!尽情的扫描或者长按!)
服务号

猜你喜欢

转载自blog.csdn.net/p106786860/article/details/70494801