检测与解决Android应用的性能问题.docVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
无论你的应用多么有创新性、有用,如果它卡得要命,或者非常消耗内存,那么每人将会愿意使用它。 因此,性能变得尤为重要。当你忙碌于构建精美的用户界面或者完成新的特性时,你可能容易忘却掉一些性能相关的事情。 这也是为什么有Google Play的应用审核机制的原因之一。 这篇文章中,你会看到每个Android工程师需要了解的一些性能问题。你将会学会使用Android SDK提供的、已安装在你的设备中的工具来测试这些问题是否发生在你自己的应用中。 如果在你的应用中发现了一个性能问题,你肯定会想修复它。我们还会看一看如何使用Android SDK 工具来获取更多关于那些没有覆盖到的性能问题的相关信息。一旦你有了这些信息,你将会对如何提升应用性能有一个更深刻的理解,并且能够构建出让用户喜爱的App。 过度绘制 步骤1 : 问题描述 你应用的用户界面是连接用户的纽带,但是创建漂亮的界面只是挑战的其中一面,你还需要确保用户界面流畅的运行。 一个常见的问题就是用户界面卡顿,出现这种情况的原因可能是overdraw。Overdraw是屏幕上的某个像素在同一帧的时间内被绘制了多次。 例如,想象一下一个有蓝色的背景文本,Android不仅会绘制对用户可见的蓝色区域,而是会绘制整个蓝色的背景以及上面的文本。这意味着一些像素会被两次绘制,这就是过度绘制。 一些如上述例子所说的过度绘制示例是不可避免的。然而,过多的多度绘制会引发明显的性能问题,因此你必须将过度绘制的可能性降到最小。 检测应用中的过度绘制相对来说比较简单。大量的过度绘制会引出其他用户界面相关问题,例如视图层级过于复杂等。基于这些原因,当你测试你的App的性能问题时,从过度绘制开始是一个明智的选择。 步骤2 : 检测过度绘制 好消息是你的Android设备上已经内置了检测过度绘制的工具。 因此你需要做的第一步就是安装你要测试的App到你的设备中。然后打开设置页面,选择开发选项(Developer Options)-调试GPU 过度绘制(Debug GPU Overdraw),然后选择“显示过度绘制区域(Show overdraw area)”。如下图所示。 这个工具使用色块来代表不同数量的过度绘制。剩下的事情就是启动你要测试的应用,然后观察它的过度绘制情况。 没颜色 : 没有过度绘制,也就是说一个像素只被绘制了一次。 蓝色 : 过度绘制了一次,也就是一个像素点被绘制了两次。 绿色 : 过度绘制了2次. 也就是一个像素点被绘制了三次,通常,你需要集中精力优化过度绘制次数大于等于2次的情况。 浅红色 : 过度绘制3次。这取决于你的应用,小范围的3次过度绘制可能是不可避免的,但是如果你看到了中等或者大量的红色区域那么你就需要查找出现这个问题的原因了。 深红色 : 过度绘制4次,像素点被绘制了5次,甚至更多次。出现这种问题你绝逼要找到原因,并且解决它。 步骤3 : 最小化过度绘制 一旦你发现了某个区域有严重的过度绘制,最简单的方法就是打开你应用的xml文件找到过度重叠的区域,特别是那些不可见的drawable对象和被绘制在其他控件上的背景,以此来降低这些地方的过度绘制。 你也应该查找那些背景属性设置为白色,并且它的父视图背景也设置为白色的区域。所有这些都会引起严重的过度绘制。 Android系统能自动的降低一些简单的过度绘制,但是这些对于复杂的自定义View并没有什么价值,因为Android不会知道你如何绘制你的内容。 如果你在App中使用了复杂的自定义View,你可以为使用clipRect函数为你的视图定义可绘制区域的边界。更新相关信息可以参考official Android documentation. ## 2. Android 图形渲染 步骤1 : 问题描述 另一个常见的性能问题就是应用的视图层级。为了渲染每个视图,Android都会经历这三个阶段 : 测量 布局 绘制 花在这三个阶段的时间与View层级中的View的数量成正比,这就意味着降低App渲染时间的最简单的方法就是识别和移除那些并没有什么卵用的UI元素。 即使在你的视图层级上的所有View都是必须的,不同的布局方式也可能对测量过程产生重要的影响。通常来说,你的视图层级越深,花在测量视图的时间就越长。 在视图渲染期间,每个View都要向它的父View提供它自己的尺寸。如果父view发现了任意一个尺寸问题,那么它会强制要求所有的子视图重新测量。 即使没有错误发生,重新测量也可能出现。例如,为了正确的进行布局RelativeLayout通常会对它们的子视图进行两次测量。子视图使用了layout_weight属性的LinearLayout也会对它的子视图进行两次测量。 这些都取决于你的布局方式,测量和重新测量的代价非常昂贵,它会严重影响你的

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档