设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 开源资讯 Google 查看内容

Android性能个案研究

2013-8-6 11:53| 发布者: joejoe0332| 查看: 3486| 评论: 0|原作者: 司马奔, 赵亮-本人, lwei, bigtiger02, 多多de棉花糖, wenger67, 蒋锴, 徐继开|来自: oschina.net

摘要:   Falcon Pro   我最近在我的Nexus 4上安装了Falcon Pro,一个新的Twitter客户端。我真的很喜欢使用这个应用程序,但我在使用它时注意到了某些地方存在一些问题,看起来滚动主时间轴并没有得到非常稳定的帧率 ...

扁平化(译注:用“缩减”更直观)视图层级

现在(其实是大部分时候)透支是要注意的事情,让我们回到层级查看器。通过检查层级树,我们可以尝试识别不必要的视图。删除视图,尤其是视图组,不仅可以帮助提高帧速率,而且可以减少内存消耗和启动时间等等。

快速浏览一下Falcon Pro的视图层级,足以识别几个只有一个单独子视图的视图组。这些视图组通常是不必要的,很容易去除。至少下面截图中显示的节点中的两个应该被删除。

Unnecessary views


  有许多其他的视图可以从这棵树中移除。例如,每个包含名为 id/listElementBottomRelativeLayout的tweet(译者注:在Twitter上发布的消息)。此布局包含了作者的名字,他的Twitter地址,这条tweet发布过后的时间,和一个图标。作者名称和Twitter地址是两个单独的 TextView而不是仅用一个,是为了使用不同风格。时间和图标使用一个 TextView 和一个 ImageView,可以使用 TextView的复合画板功能合并成一个 TextView


  左边的滑入式菜单使用了几组 LinearLayout+TextView+ImageView 来显示带图标的标签。每一组都可以用一个单独的TextView来替换。

如何摆平你的UI:我在2009年的谷歌I/O上谈论了题为激发你的UI的文章,在其中更详细地解释了这些技术。

输入事件处理

还记得当我们在看systrace的时候发现触摸事件响应处理有一些延迟吗?现在就是解决这个问题的时候啦。traceview就是处置这种问题和了解应用正在做什么的最好的工具。

Traceview是一个测量应用的方法调用所耗时间的Dalvik分析器。怎样使用它呢?在ADT或者监视器中打开DDMS视图,在Devices选项卡中选择您的应用的进程,然后点击“start method profiling”按钮(就是一个红色圈圈和三个箭头的那个按钮)。

开启追踪之后,在主时间轴上选取开始和结束时间,再次点击按钮来完成跟踪。您也可以下载 我的程序调试信息。结果如下。

Traceview


点击第21行,ViewRootImpl.draw(),该方法调用时间将会高亮。表的最后一行将会给出这个方法及其子方法的平均调用时间。如果你仔细看时间轴上的高亮处,你会发现连续帧之间的差别。


一个弄清楚这些差别之间是怎么回事的简易方法就是在差别开始出现的地方逐渐放大,然后点击其中最大的彩色块。跟踪父链直到找到你的问题所在。在这个案例中,我跟踪了Pattern.compileImpl方法的调用(平均调用时间为0.5ms),找到了DBListAdapter.bindView方法.


显然,应用程序将相同的表达式被一遍又一遍的重复编译,每次调用时候势必在主时间轴产生一次调用时间花费。Traceview表明bindview方法的平均调用时间为38ms,56%的时间都花在了HTML文本解析上。这个花费应该在后台默默的运行而不应该阻塞UI主线程。当然正则表达式也不应该被一次一次的重复编译。

试试吧,少年!

最后一个调试给大家留作练习。这是一个包含两个菜单可以向左或向右滑动切换的应用。但是我在使用openGL调试工具调试时发现在菜单滑动切换的时候产生了大量的画图消耗。下载我的调试,看看是什么原因造成了这种现象吧(去到第34帧。)

提示:
    1、应用程序应该通过调用 View.setLayerType()使用硬件层来简化绘图。
    2、多余的背景也可以通过9-patches来巧妙的优化。
    3、裁剪同样也是很有用的优化方式。
    4、通过设置ColorFilter传递给setLayerType()的画笔的方式也许可以移除最后的绘图指令哦。

我们一起学习了多种优化应用的工具。虽然我可以花大量的时间来讲解选用何种技术来解决解决特定问题,但是那样的话这篇文章就会显得太臃肿了。android开发者官网上的提供文档和Google I/O大会有关于android的讨论(网上有免费的幻灯片和视频)也许能够帮助你。


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部