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