分享

[Android技术专题]应用开发进阶必经之路之性能优化(下)

 寒江雪书院 2016-08-23
前言

        性能优化在一款产品的迭代过程中非常重要;程序实现了功能、还原产品原型只能保证程序能用,但如果要让用户更愿意使用,产品得好用。试想一下如果你开发的产品启动慢、页面显示需要长时间转圈加载、页面切换卡顿、黑白屏、用一会机器就发烫、耗内存、OOM、程序切换到后台后占用内存无法释放......,这些问题就像正在玩游戏时弹出提示框这类糟糕的用户体验一样让用户恼火,如果用户不得不使用你的产品,可能还会一直忍受;但如果有很多同类竞品,糟糕的用户体验会大大影响留存率。有时候产品在市场上的表现差,真不能全怪产品和运营,程序体验问题也是很大一部分原因。

但大部分产品并没有足够重视性能问题,随便打开一个应用,即使是大厂出品,也极大可能存在过渡绘制和内存泄露的问题;也有可能是开发人员意识到了程序存在性能问题,但完成迭代就够忙的了,哪有时间去做这类不能体现绩效的事情。其实在越来越重视体验,同类产品竞争越来越激烈的环境下,对于开发人员来讲,只完成迭代,把功能做完远远不够,最重要的是把产品做好,让更多人愿意使用。重视性能问题,优化产品的体验,比改几个无关痛痒的bug会有价值得多。

网上能够找到很多关于性能优化很有价值的参考资料(详见文末),包括腾讯、阿里、魅族、豌豆荚、小米、UC等知名互联网公司都做过关于APP性能优化的分享,如果你专注于应用开发,并且想做一款备受欢迎的产品,性能优化是你进阶路上必须去学习和实践的。

温馨提示:为获得更好的阅读体验,请点击阅读原文查看。


本篇为续集,请先阅读:
[Android技术专题]应用开发进阶必经之路之性能优化(上)


四、性能优化工具

        本文重点介绍谷歌官方提供的一系列应用性能优化工具以及值得推荐的第三方性能优化工具,这些工具主要集中在如下几个地方:

  • 开发者选项:GPU呈现模式分析、GPU过渡绘制、严格模式、应用无响应ANR等;

  • IDE中:Android Studio,比如静态代码检测工具、Memory Monitor、CPU Monitor、NetWork Monitor、GPU Monitor、Layout Inspector、Analyze APK等;

  • SDK中:sdk\tools,比如DDMS、HierarchyViewer、TraceView等;

  • 第三方性能优化工具:MAT、Leakcanary等;


2
IDE AndroidStudio

Android Studio是谷歌官方提供的集成开发环境(后面简称AS),同样作为Android集成开发环境的Eclipse很好用,但AS更高效、顺手、便捷,这在没有使用AS之前是无法感受到的。AS不仅提供了程序开发、构建、调试的环境,还提供了一系列优化应用质量的工具,这些工具包括静态代码检测工具Inspect Code、Android Monitor、Analyze APK...,同时还集成了Android Device Monitor。通过这三个工具基本上可以检测、分析、定位大部分Android应用的性能问题。


 (1) 
Inspect Code

AS中的Insepct Code是用于对代码进行静态质量分析的工具,它是lint的增强版,可以检测出来很多潜在的问题,同时给你提供改善建议;它不仅可以对整个工程、某个module、某个文件进行所有规则的代码静态质量检测,还可以针对某一项规则对整个工程进行检测:

在Inspection窗口的左侧,有提供了一系列快捷按钮用于快速分析、定位、修复代码中的问题:

打开Settings的Inspections选项,可以看到这个工具能够检测出很多关于Java和Android方面的性能问题,比如布局导致的过渡绘制、在onDraw方法中创建新的实例、Handler内部类导致的潜在内存泄露、使用SparseArray代替HashMap的建议、布局层次太深、TypedArrays和VelocityTrackers没有调用recycle方法导致的内存泄露、存在没有使用的资源文件、系统方法取代自定义实现功能代码块的建议、IO操作导致的内存泄露问题、String和StringBuilder的相互替换等等;随着AS的不断更新,这个功能在不断完善,最新的AS版本中,很多代码层面的问题都能够被检测出来。

通过这个工具可以删掉无用资源,检测出明显的性能问题,以及对代码可读性和性能方面的建议,使用起来很简单,建议每天作为日常,提交代码前都检测一次,这比在持续集成过程中,使用sonar等代码质量工具分析更方便。

更多关于Inspect Code的描述参见:

(1)   Inspection Tool Window

(2)  Android Studio提高代码质量必杀技:Inspact Code


 (2) 
Android Monitor

Andorid Monitor提供了一系列的性能检测工具,通过它可以帮助你剖析应用的性能,以便优化、调试和改善应用各方面的性能问题;Android Monitor可以从如下几个方面对真机/模拟器中正在运行的程序进行性能监控:

(1)Log日志,包括系统日志和自定义日志;

(2)实时监控内存、CPU、GPU的使用情况;

(3)实时监控网络流量的消耗(只适合于真机);

(4)采集运行时信息并保存为文件,供工具分析;


LogCat日志窗口

通过Logcat日志窗口可以查看系统事件以及程序自定义的日志信息,比如GC消息、程序运行时异常日志、当前启动应用的包名及入口等;它不仅提供了实时查看设备日志信息的功能,还有一段时间的日志缓存;同时提供了按照搜索(支持正则表达式)、按照等级/自定义标签/指定包名筛选日志的功能,以帮助你快速定位问题。

Logcat窗口是以行为单位对日志进行缓存,当窗口中的缓存日志超过指定的行数上限时,会删掉最先缓存的日志。如果你觉得窗口中的日志缓存清除太快了,不便于跟踪问题,可以在AS安装目录下的"bin/idea.properties"文件中增加“idea.cycle.buffer.size=你想缓存的行数”来调整窗口给的日志缓存行数,但建议不要调得太高,否则会严重影响AS的体验,缓存行数越多AS就会越卡,控制在5000行以内已经基本满足需求了。

在程序中使用Log类打印日志时,TAG的长度建议不要超过23个字符,否则会做截断处理,影响问题的准确跟踪。

Logcat窗口的左侧有一列工具快捷按钮,方便我们快速找到我们需要的信息:

内存监控窗口:Memory Monitor

CPU监控窗口:CPU Monitor

GPU监控窗口:GPU Monitor

网络流量监控窗口:Network Monitor

HPROF查看和分析工具:HPROF Viewer and Analyzer

内存分配跟踪工具:Allocation Tracker

函数调用栈分析工具:Method Tracer

查看系统信息工具:System Information

Analyze APK...:



3
其他性能优化工具
  • TraceView:正确使用Android性能分析工具——TraceView

  • HierarchyViewer:Android UI 优化——使用HierarchyViewer工具

  • MAT:Android 性能优化之使用MAT分析内存泄露问题

  • LeakCanary:LeakCanary 中文使用说明


五、参考资料
  • Android Performance Patterns

  • Android性能优化典范

  • Speed up your app(中文版)

  • Android客户端性能优化(魅族资深工程师毫无保留奉献)

  • Android应用内存泄露分析、改善经验总结

  • 内存泄露从入门到精通三部曲之基础知识篇

  • 内存泄露从入门到精通三部曲之排查方法篇

  • 内存泄露从入门到精通三部曲之常见原因与用户实践

  • awesome-android-performance

  • 听云应用性能管理大讲堂历届讲师课件汇总

  • Infoq演讲:Android内存优化

  • Infoq演讲:移动开发网络性能优化实践

  • Infoq演讲:移动应用性能揭秘

  • Infoq演讲:安卓开发中动画效果的实现和优化

  • Infoq演讲:Android淘宝客户端用户体验优化实践

  • 阿里技术沙龙:小米系统性能的优化

  • 阿里技术沙龙:豌豆荚的性能优化简介

  • Android性能测试工具汇总


小贴士
     Android技术资源群(干货群)说明
    建群宗旨是分享优质的Android技术资源。群成员可以自由分享任何Android方面的技术资源和文章,并会不定期总结成文章方便大家阅读。目前群已满,先拉入技术交流群,申请加群请加群助理微信:Jf-1994(井方哥),并备注:姓名-地区-公司-职业-加群。


Open软件开发小组



专注Android开发,欢迎关注!



点击“阅读原文”

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多