这个工具可能是最简单最直观的优化工具了,说他简单是直接启动,说他直观说因为它全部是可视化界面,上手容易。
这个工具可以帮你找到布局中不必要的View,布局中性能瓶颈View,和给出measure、layout的时间
以这篇文章中的布局为例:优化布局层次
有这样一个UI设计:
很容易会写出这样的布局:
这篇文章给出了更好的布局方式:
可能大家觉得少了一个View,减了一个层级而已,但是实际上文章指出了:measure时间从1ms减到了0.5ms左右,这是十分重要的,因为:“Might seem like a small improvement, but this time is multiplied several times because this layout is used for every item in a list.”(这个改动会在listView中每一个元素中使用,它消耗的时间会随着list数量而不断增加)
这里有几点自己的小技巧:
1.凡是一个LinearLayout包含一个TextView和一个ImageView的,基本都可以用一个含有componentDrawable的TextView来替代
一种情况例外:textview居中,但是drawable要靠在这个LinearLayout的边缘,这时可以用DynamicDrawableSpan这个类实现,只是需要在代码里增加逻辑
2.怎样看到布局中,最影响measure、layout的View?也就是布局性能瓶颈 ?
选中根View,点击上面一排按钮中的“Request Layout”,这时所有的子View都会被重新measure、layout一遍,并且单击会有时间显示。
这时从根View到最底层View,存在着这样一个View:在他的父容器View中,measure时间都很长,直到它的子元素measure时间很短,那么他就是你要找的性能瓶颈(本人亲测,slidingMenu添加到一个布局后,会增加10+ms的measure时间)
解决办法是:重载这个性能瓶颈View的onLayout、onMeasure方法,将它的View强制高宽、layout在你想要的位置,这样减少自己高宽和子元素高宽的计算时间,从而达到加速measure、layuot的目的。当然这个方法根据实际UI需要不同而不同,但总体思想是一样的。
这个补充下:每个View下方显示的三个小点点代表了它的measure、layout、draw性能,从绿到黄红,依次变差,具体参看第三点给出的链接原文吧,学好英文很重要~~
3.我还是推荐大家看看我文章中的链接原文,尤其是Google自己的文章,还有这个,官方介绍 Hierarchy Viewer
http://developer.android.com/tools/debugging/debugging-ui.html
4.在没有debug权限的手机上,无法使用 怎么办?
答案在这里:ViewServer android大神Romain Guy自己写的工具