本文先总括Android性能优化的主要几个方面,后续再逐条详细说明。
1.启动页面优化:
- 启动页面网络请求优化(可以根据启动页面所需,有针对的优化网络请求)
- 启动页面特效优化(添加启动动画,在视觉效果上造成“启动页面加载速度很快”的效果)
- 启动页面无黑屏(配合Android Theme使用)
- Application启动速度优化(尽量不将一些业务逻辑放于Application中)
- 启动页返回键的屏蔽
2.布局优化:
减少布局文件的层级(测量、布局、绘制的时间减少):可以使用RelativeLayout来减少嵌套,从而达到减少层级的目的,另外在相同层级的情况下使用LinearLayout(相比RelativeLayout更高效)
使用include标签复用,merge标签降低层级,ViewStub来实现懒加载,另外Space用来可以占位。
3.绘制优化
- 减少太多重叠的背景
- 减少太多层叠的View
- 减少复杂的Layout层级
注:设置->其它高级设置->开发者选项->调试CPU过度绘制,可以查看过度绘制
4.内存泄漏优化:
参考之前文章:http://www.jianshu.com/p/2511077ba946
5.优化工具介绍:
- StrictMode:
主要用来做主线程优化分析,开启StrictMode后, 如果线程中做一些诸如读写文件,,网络访问等操作,将会在Log console输出一些警告, 警告信息包含Stack Trace来显示哪个地方出了问题。文档:https://developer.android.com/reference/android/os/StrictMode.html - SystraceMode:
Systrace是一个收集和检测时间信息的工具,它能显示CPU和时间被消耗在哪儿了,每个进程和线程都在其CPU时间片内做了什么事儿。而且会指示哪个地方出了问题, 以及给出Fix建议。用来分析UI的绘制时间,结合Hierarchy Viewer来提升UI性能。也可以用来发现耗时操作。
文档:
https://developer.android.com/studio/profile/systrace.html
https://developer.android.com/studio/profile/systrace-walkthru.html
https://developer.android.com/studio/profile/systrace-commandline.html?hl=fy - Hierarchy Viewer:
Hierarchy Viewer提供了一个可视化的界面来观测布局的层级,让我们可以优化布局层级,删除多余的不必要的View层级,提升布局速度。用来做View层级分析,可以分析出View Tree中的性能阻塞点,以便对症下药,提升布局性能。Hierarchy Viewer需要Root的机器(产品机没有开启ViewServer)才可以执行。可以使用第三方的开源的ViewServer来协助我们在未Root的机器上使用Hierarchy Viewer分析。 - TraceView
一个图形化的工具, 用来展示和分析方法的执行时间.
文档:
https://developer.android.com/studio/profile/traceview.html
https://developer.android.com/studio/profile/traceview-walkthru.html - Memory Monitor:
内存使用检测器,可以实时检测当前Application的内存使用和释放等信息,并以图形化界面展示.用来做内存分析,内存泄露排查的不二之选。可以结合heap viewer,allocation tracker来分析,可以导出hprof文件结合第三方的MAT工具分析泄露点。 - Other Motinor:
Android Studio的Monitor还提供了其他三个Motinor --- CPU, GPU, Network.分别用来跟踪监测CPU,GPU和Network的使用极其变化, 可以作为网络优化, 流量优化和渲染优化等的一个指导.
文档:
https://developer.android.com/studio/profile/am-cpu.html
https://developer.android.com/studio/profile/am-gpu.html
https://developer.android.com/studio/profile/am-network.html
6.反射优化:
- 在代码中减少反射调用;
- 对频繁调用的返回值进行Cache;
7.稳定性优化:
- 连续48小时monkey不应出现闪退,anr问题。
- 如果应用接入了数据埋点的sdk,比如百度统计sdk等,这些sdk都会将应用的崩溃信息上报回来,开发者应每天关注这些统计到的崩溃日志,严格控制应用的崩溃率;
8.耗电优化:
- 应用进入后台后不应异常消耗电量;
- 操作应用后,退出应用,让应用处于后台,一段时间后通过
adb shell dumpsys batterystats
查看电量消耗日志看是否存在异常。
9.其他优化:
- 慎用异常,异常对性能不利
- Adapter优化
- 节制地使用Service等等
参考:
http://blog.tingyun.com/web/article/detail/155
http://blog.tingyun.com/web/article/detail/155