app的功能现在日益复杂,同时对页面的运行速度,响应速度也有了更高的要求,本文章介绍了几种比较常见的性能检测工具,性能优化方式。
Android性能优化主要进行布局优化和内存优化。
1.布局优化
(1)避免过度绘制。
Android系统提供检测过度绘制的工具,开发者选项中 “Enable GPU Overdraw”,根据颜色不同,可产看是否过度绘制,尽量增大蓝色区域,减少红色区域。同时也可以使用“Profile GPU Rendering”,翻译过来就是GPU呈现模式分析,选择条形图。中间的绿色横线代表绘制时间为16ms,黄色代表绘制DIspaly List的时间,红色代表OpenGL渲染Display List所需要的时间,黄色代表Cpu等待GPU处理的时间,其中蓝色参考度最大,蓝色代表绘制时间。按照Gooogle官方给出的性能优化 标准,60fps为最佳,这要就每帧绘制时间不超过16ms。
Original colour – 没有过度绘制,只在屏幕上绘制过一次
Blue – 1x – 过度绘制,在屏幕上绘制过2次
绿色 Green – 2x – 过度绘制,在屏幕上绘制过3次
浅红 Pink – 3x –过度绘制,在屏幕上绘制过4次
暗红 Red – 4x – 过度绘制,在屏幕上绘制过5次 。
(2)优化布局层级。
Android中,对View的测量、绘制都是通过对View的遍历来进行操作的。Google在Api文档中建议View的高度不宜超过10层。
(3)避免嵌套过多布局。
**<include>**
界面共同的布局,可以使用标签加载到不居中。
**<merge>**
一般与同时是使用,例如当前布局为垂直布局,包含布局也为垂直布局,可使用merge,包含布局种的内容会被直接添加到当前布局中。
**<ViewStub>**
延迟加载,不可视,大小都为0,只有在显示的时候才会渲染,在初始加载中不显示可使用。
可使用setVisbility()或viewStub.inflate()显示布局。
(4)Hierarchy View。
在模拟器下查看布局层级,通过hierarchy view 可以很快在视图树种找到冗余的布局,达到优化效果。
该工具位于sdk/tools。
2.内存优化
Android的内存指手机ram,包括:
- 寄存器:无法控制。
- 栈 :存放基本类型的数据,对象的引用,
- 堆 :存放由new 创建的对象和数组 由Gc管理。
- 静态存储区域 :静态变量。
- 常量池:jvm为每个被装载的类型维护一个常量池。
(1)内存泄漏优化
1.bitmap优化。
使用适当分辨率和大小的图片,通过使用内存缓存和硬盘缓存更好的使用bitmap。
2.静态变量。
静态变量包含当前activity。
3.单例模式。
单例模式的生命周期和application相同。
4.属性动画。
无限循环动画在activity未停止动画。
(2)代码建议
1.对常量使用static final修饰
2.避免创建过多对象
3.尽量不要使用枚举,少用迭代器
(3)内存泄漏工具
MAT工具:打开DDMS,选择监听的线程,点击菜单栏中的“Update Heap”,在Heap标签中,点击“Cause GC”,显示当前内存状。
点击菜单栏的“Dump HPROF File”,等待几秒 ,会生成.hprof文件,使用sdk/platform-tools,hprof-conv进行转换,命令格式为“hprof-conf infile outfile”,使用生成的heap.hprof文件就可以利用Mat工具进行内存分析了。