本文参考来源:
作者:张明云
链接:https://zhuanlan.zhihu.com/p/22103855
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1 性能优化分类
除了交互、视觉、内容方面的问题外,在用户使用过程中,给用户造成烦恼的问题都可以归结为是性能问题,比如上文中列出的这些都属于性能问题,按照影响的方面不同,可以分为如下几大类:
(1)内存问题:耗内存、内存泄露(Memory Leak)、内存溢出(OOM);
(2)功耗问题:发烫(耗电);
(3)流畅度问题:页面切换卡顿、启动或页面加载慢、ANR(卡慢崩);
针对上面一系列的性能问题,谷歌官方提供了各种各样的工具来针对性的解决各个方面的问题,也有很多不错的第三方工具值得尝试:
(1)内存问题:Lint静态代码分析工具;Android Monitors(监控)内存分析工具、MAT内存分析工具;第三方控件Leakcanary;
(2) 功耗问题:battery-historian电量优化工具、wake_lock唤醒锁机制、AlarmManager休眠的情况下唤醒来执行任务、优化网络传输、Job Scheduler任务调度优化;
(3)流畅度问题:提供了Lint分析工具;Allaction Tracking追踪内存分配信息工具、TraceView来确定详细的问题;Hierarchy Viewer层次布局检查工具、GPU呈现模式过渡绘制检测工具等;
2 性能优化详细分类
3 性能优化指标
性能指标的定义应该具有可衡量、可比较的特点,所以每项性能指标可以是数值,也可以是一份报告,比如:
(1)流畅度:FPS,即Frams per Second,一秒内的刷新帧数,越接近60帧越好;
(2)启动时间:时间,越短越好;
(3)内存泄露:AS静态代码检测结果、MAT检测结果,内存泄露很难用数值定义,但可以通过将优化前后工具检测的结果对比得出结论。没有内存泄露最好;
(4)内存大小:峰值,峰值越低越好;
(5)功耗:单位时间内的掉电量,掉电量越少越好;
从上面各项性能指标的定义可以看出,性能优化效果的评估主要是通过对比得出来的,性能如何只是相对的。只要针对同一个应用的同一项指标,优化后比优化前更优,就说明优化是有效果的。
4 性能优化原则和方法
解决性能问题的过程中,遵循以下几个原则,有助于提高解决问题的效率:
(1)足够多的测量:不要凭感觉去检测性能问题、评估性能优化的效果,应该保持足够多的测量,数据不会说谎。使用各种性能工具有助于快速定位问题,这比凭感觉要靠谱得多;
(2) 使用低配置的设备:同样的程序,在低端配置的设备中,相同的问题会暴露得更为明显;高配的设备很多时候会让你忽略掉性能问题;
(3)权衡利弊:在能够保证产品稳定、按时交付的前提下去做优化,不能顾此失彼,为了性能优化导致产品迟迟不能交付;
5 性能优化工具
谷歌官方提供的一系列应用性能优化工具以及值得推荐的第三方性能优化工具,这些工具主要集中在如下几个地方:
(1)开发者选项:GPU呈现模式分析、GPU过渡绘制、严格模式、应用无响应ANR等;
(2) IDE中:Android Studio,比如静态代码检测工具、Memory Monitor、CPU Monitor、NetWork Monitor、GPU Monitor、Layout Inspector、Analyze APK等;
(3)SDK中:sdk ools,比如DDMS、HierarchyViewer、TraceView等;
(4)第三方性能优化工具:MAT、Leakcanary等;