无论是启动,内存,布局等等这些优化,最终的目的就是为了应用不卡顿。应用的体验性好坏,最直观的表现就是应用的流畅程度,用户不知道什么启动优化,内存不足,等等,应用卡顿,那么这个应用就不行,被卸载的概率非常大。所以说为了保证用户留存率,卡顿优化是非常非常的重要。
Android系统每隔16ms会发出VSYNC信号重绘我们的界面(Activity)。
因为Android设定的刷新率是60FPS(Frame Per Second), 也就是每秒60帧的刷新率, 约合16ms刷新一次 。
了解到16ms我们接着分析卡顿的原因所在。
界面性能取决于UI渲染性能. 我们可以理解为UI渲染的整个过程是由CPU和GPU两个部分协同完成的。其中, CPU负责UI布局元素的Measure, Layout, Draw等相关运算执行。 GPU负责栅格化(rasterization), 将UI元素绘制到屏幕上。
如果我们的UI布局层次太深, 或是自定义控件的onDraw中有复杂运算, CPU的相关运算就可能大于16ms, 导致卡顿。
如果我们的界面存在Overdraw, 也可能导致卡顿。
Overdraw: 用来描述一个像素在屏幕上多少次被重绘在一帧上。 通俗的说: 理想情况下, 每屏每帧上, 每个像素点应该只被绘制一次, 如果有多次绘制, 就是Overdraw, 过度绘制了。
UI线程的复杂运算会造成UI无响应, 当然更多的是造成UI响应停滞, 卡顿,产生ANR已经是卡顿的极致了。
CPU, GPU相关的,实际上内存原因也可能会造成应用不流畅, 卡顿的。 简而言之, 就是执行GC操作的时候,任何线程的任何操作都会需要暂停,等待GC操作完成之后,其他操作才能够继续运行, 故而如果程序频繁GC, 自然会导致界面卡顿。
上面我有讲到卡顿的几大原因。对此我总结出一个优化文档笔记,由于文章篇幅有限,展示如下,如需深入学习Android性能优化——卡顿优化可以【私信:“手册”获取 参考深入学习】。如下下面几种优化手段。
布局优化主要有以下方向:
垃圾回收器有三大职责:
关于Android卡顿优化,我们怎么做到极致优化。需要好好详细去学习剖解。因此文章几百上千字也无法全面了解卡顿优化;对此我把工作中的以及网上大部分优化素材,整合在《Android高工必备性能优化》这个PDF文档中。
Android性能优化解析
Android性能优化是我们,踏入高级工程师的必备技术。性能优化是我们始终躲不掉的一道门槛,学好性能优化绝对是你在Android开发领域里面起到很重要作用。许多大厂的招聘条件里面都是必备技能。