android 性能优化 总结

16毫秒原则:

Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps,为了能够实现60fps,这意味着程序的大多数操作都必须在16ms内完成。

超过16ms 就会出现丢针的情况,因为他要在下一个信号量开始进行绘制

http://hukai.me/images/vsync_over_draw.png

12fps大概类似手动快速翻动书籍的帧率,这明显是可以感知到不够顺滑的。24fps使得人眼感知的是连续线性的运动,这其实是归功于运动模糊的效果。24fps是电影胶圈通常使用的帧率,因为这个帧率已经足够支撑大部分电影画面需要表达的内容,同时能够最大的减少费用支出。但是低于30fps是无法顺畅表现绚丽的画面内容的,此时就需要用到60fps来达到想要的效果,当然超过60fps是没有必要的。

卡顿常见的原因:

1,卡顿 ui线程去做 耗时的操作,开启子线程然后用handler 的机制去通知主线程更新。

2,layout层级太高。j

3,view的过度绘制。Show GPU Overdraw 打开过度绘制图。蓝色,淡绿,淡红,深红

https://blog.csdn.net/sheng2459704496/article/details/52044867

Profile GPU Rendering

On screen as bars的选项 显示条形图模式

背景问题

4,频繁的触发  view的measure 和layout操作。

5,频繁的触发gc操作  gc每次进行垃圾回收的时候线程都暂停。

图像绘制流程:

Resterization栅格化是绘制那些Button,Shape,Path,String,Bitmap等组件最基础的操作。它把那些组件拆分到不同的像素上进行显示。这是一个很费时的操作,GPU的引入就是为了加快栅格化的操作。

http://hukai.me/images/gpu_cpu_rasterization.png

内存泄漏问题:

java 中的内存环境,

1.对象的引用

堆:对象,还有每个方法的变量

方法区,所有的静态变量,

猜你喜欢

转载自blog.csdn.net/sheng2459704496/article/details/81481623