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.对象的引用
堆:对象,还有每个方法的变量
方法区,所有的静态变量,