使用Hierarchy Viewer进行UI性能优化
来源:互联网 发布:石头剪刀布 网络歌手 编辑:程序博客网 时间:2024/05/24 08:25
Hierarchy Viewer是随AndroidSDK发布的工具,位置在tools文件夹下,名为hierarchyviewer.bat。它是Android自带的非常有用而且使用简单的工具,可以帮助我们更好地检视和设计用户界面(UI)。
有兴趣的同学可以去阅读下原版的文档,附上国内的一个网址链接:http://www.android-doc.com/tools/debugging/debugging-ui.html#HierarchyViewer
1、Hierarchy Viewer的作用
(1)直观地获得UI布局设计结构和各种属性的信息,帮助我们优化布局设计
(2) 结合debug帮助观察特定的UI对象进行invalidate和requestLayout操作的过程
2、HierarchyViewer使用方法
(1)连接设备真机或者模拟器
(2)启动你要观察的应用
(3)打开Hierarchyviewer,点击hierarchyviewer文件即可。连接后如下图,这个图是在官方文档获取的
(4)双击最上面的,如下图的 Focused Window,这个是当前窗口,加载完毕后会显示当前界面层次结构。
(5)观察层次结构图,这个图有点大,可以拖动。View Hierarchy窗口显示了Activity的所有View对象,选中某个View还可以查看View的具体信息,最好选择工具中的Show Extras选项
(6)观察单个view,选择单个view后会出现如下图所示图形。这里会看到Measure、Layout、Draw的耗时,红色或黄色的点代表速度较慢的View对象。但是低性能并不表示一定有问题,特别像是ViewGroup对象,View的子节点越多,结构越复杂,性能越差。
对于Android的UI来说,invalidate和requestLayout是最重要的过程,Hierarchyviewer提供了帮助我们Debug特定的UI执行invalidate和requestLayout过程的途径,方法很简单,只要选择希望执行这两种操作的View点击按钮就可以。当然,我们需要在例如onMeasure()这样的方法中打上断点。这个功能对于UI组件是自定义的非常有用,可以帮助单独观察相关界面显示逻辑是否正确。
(7)Pixel Perfect View界面:点击界面左下角类似九宫格的按钮,就进入了Android称之为Pixel Perfect View的界面,这个界面里主要是从细节上观察UI效果:
左边是浏览视图,中间是全局的视图,右边是当前关注的地方的细节放大,是像素级别的,对于观察细节非常有用。
Refresh Rate用来控制View多久从模拟器或者真机上更新一次视图数据。
Zoom就是放大局部细节用的,细节显示在最右边的视图上。
Overlay比较有意思,主要用来测试在当前视图上加载新的图片后的效果,点击Load…选择图片后,可以控制在当前界面上显示的透明读,滑动0%~100%的控件即可。如果选择了Show in Loupe,右侧的放大视图也会将加载的图片的细节结合着透明度显示出来。不过目前这个Overlay做的比较简单,合成的图只能从界面的左下角为原点画出来,不能移动。
3、使用layoutopt,分析指定的布局,然后提出优化建议
layoutopt是android为我们提供的布局分析工具,要运行它,打开命令行进入sdk的tools目录,输入layoutopt加上你的布局目录命令行。运行后如图所示,框出的部分即为该工具分析布局后提出的建议,这里为建议替换标签
下面列出一些常会碰到的输出:
$ layoutopt samples/
samples/compound.xml
7:23 The root-level can be replaced with
11:21 This LinearLayout layout or its FrameLayout parent is useless
samples/simple.xml 提示未使用到该布局
7:7 The root-level can be replaced with
samples/too_deep.xml
-1:-1 This layout has too many nested layouts: 13 levels, it should have <= 10!
20:81 This LinearLayout layout or its LinearLayout parent is useless
24:79 This LinearLayout layout or its LinearLayout parent is useless
28:77 This LinearLayout layout or its LinearLayout parent is useless
32:75 This LinearLayout layout or its LinearLayout parent is useless
36:73 This LinearLayout layout or its LinearLayout parent is useless
40:71 This LinearLayout layout or its LinearLayout parent is useless
44:69 This LinearLayout layout or its LinearLayout parent is useless
48:67 This LinearLayout layout or its LinearLayout parent is useless
52:65 This LinearLayout layout or its LinearLayout parent is useless
56:63 This LinearLayout layout or its LinearLayout parent is useless
samples/too_many.xml
7:413 The root-level can be replaced with
-1:-1 This layout has too many views: 81 views, it should have <= 80!
samples/useless.xml 提示该布局中有太多的控件
7:19 The root-level can be replaced with
11:17 This LinearLayout layout or its FrameLayout parent is useless
4、使用HierarchyViewer碰到的一些问题
(1)hierarchyviewer unable to debug device
Android的官方文档上有说明:
To preserve security, Hierarchy Viewer can only connect to devices running a developer version of the Android system.
也就是说:Hierarchy Viewer只能连接Android开发版手机或是模拟器,只有ro.secure==0 && ro.debuggable==1的Android系统。
Hierarchy Viewer在连接手机时,手机会启动View Server与其进行socket通信。但在我们平常用的商业机上,是无法开启View Server的,Android源码实现这个限制的如下(目录:/frameworks/base/services/java/com/android/server/wm/WindowManageService.java):
public boolean startViewServer ( int port ) { if ( isSystemSecure() ) { return false ; } if ( !checkCallingPermission( Manifest.permission.DUMP, "startViewServer" ) ) { return false ; }}
如果要在自己的手机正常地使用Hierarchy Viewer,有三种方法:
a、直接刷一个开发版本的Android固件(一般只有在手机开发公司才可以)
b、如果只需要查看自己开发的应用的UI变化,可以用GitHub上的一个项目ViewServer
c、在Root的手机上开启ViewServer,使得HierachyViewer能够连接
5、layoutopt给出的建议
(1)Hardcoded string
出现警告的代码如下所示:
<Button android:id="@+id/button1" android:layout_width="118dp" android:layout_height="wrap_content" android:text="下一步" />"
虽然可以正常运行,但是这不是一个好习惯,应该在res/values/strings.xml中设置:
<?xml version="1.0" encoding="utf-8"?><resources> <string name="message">下一步</string></resources>
引用的时候使用
android:text=”@string/message”
- 使用Hierarchy Viewer进行UI性能优化
- UI优化之 Hierarchy Viewer使用详解
- 使用Hierarchy Viewer分析优化布局性能
- 【性能优化】性能优化---Hierarchy Viewer的使用
- 【Hierarchy Viewer】Android UI 优化——使用HierarchyViewer工具
- 性能优化十一之Hierarchy Viewer工具使用
- Android UI优化工具 ----Hierarchy Viewer
- Android UI 优化工具--Hierarchy Viewer
- 性能优化(一) Hierarchy Viewer
- Android性能优化工具Hierarchy Viewer
- 【UI布局优化】Hierarchy Viewer-优化你的UI
- 【UI布局优化】Hierarchy Viewer-优化你的UI
- Android 性能优化 一 布局优化工具Hierarchy Viewer的使用
- Android 使用Hierarchy Viewer优化布局
- 布局优化必备 Hierarchy Viewer 工具使用
- 【Hierarchy Viewer】利用Hierarchy Viewer优化布局
- Android UI优化工具——Hierarchy Viewer
- 【Android性能优化】Hierarchy viewer is shows n/a
- linux上访问页面
- Swift的一些基本属性5 (for循环)
- Android Studio 小技巧合集
- 欢迎使用CSDN-markdown编辑器test
- Kindeditor上传本地图片成功后不回显,弹出层也不关闭,解决办法
- 使用Hierarchy Viewer进行UI性能优化
- Android 控件使用教程(二)—— RecyclerView 展示图片
- Android工程师学RxJava(二):进阶
- Eclipse的web.xml注解问题
- lazy懒加载(延迟加载)UITableView
- zsc1567: 烦恼的小明&hdu 1007(分治)
- python (模块、包)搜索与导入的问题
- Eclipse 各文件讲解说明
- 学习Arcgis for android 日志