性能优化(一) Hierarchy Viewer

本文介绍了一款用于优化Android应用布局的工具,通过可视化界面帮助开发者快速定位并解决布局中的性能瓶颈,如不必要的View和过高的measure、layout时间。文章还提供了实用技巧及案例分析。

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

    这个工具可能是最简单最直观的优化工具了,说他简单是直接启动,说他直观说因为它全部是可视化界面,上手容易。

    这个工具可以帮你找到布局中不必要的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自己写的工具



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值