基本原理:
渲染机制
android的刷新频率是60fps,也就是说要在16ms内完成一次刷新,如果超时刷新,那么就容易看到卡顿的画像,也是丢帧的现象。如果刷新时间短,那么我们就可以看到一个非常流畅的动画,Android系统每16m会向渲染硬件发出VSYNC命令让其渲染,
VSYNC有两个概念:
第一:刷新频率,指的是硬件定义的刷新频率,由硬件参数决定,
第二:GPU每秒绘制的频率,比如60,
如果GPU的频率大于硬件的刷新频率,那么能保证每次刷新都是新数据,如果小于,没那就会出现数据没有刷新,丢帧的现象。
渲染的流程:
渲染是有CPU执行生成Texture纹理和Polygons,然后把这些数据交给GPU进行栅格化处理,最后把数据传递给显示器。
渲染优化
第一:内存优化:
出现的问题有:在一个16ms内,由于引发GC次数过多,导致没有完成刷新,导致最后的卡顿现象。那么需要解决内存的优化。优化思路是减少GC次数,那么就要节省内存开销以及及时释放内存。节省内存开销:减少不必要的对象重复创建(循环内部创建对象,使用String进行+操作),减少内存泄漏,增加对象复用。
第二:CPU优化:
如果CPU过多的执行一些操作,导致没有CPU及时生成纹理数据交给GPU处理,那么也会导致源头数据得不到更新,那么CPU优化也很重要,优化思路是:减少CPU空转时间。那么回归操作系统,我们的方法有:使用多线程处理,使用缓存和批处理,优化耗时的算法。对于android来说,需要CPU执行的操作有视图的测量,创建,回收操作,那么我们就需要减少不必要的视图创建工作,那么我们要减少试图嵌套层级,减少重绘,减少Gone的操作导致的重新测量操作。我们的方案有:merge方法减少层级,ViewStub延缓试图加载,
第三:GPU优化:
同样是卡顿现象,GPU主要的工作是栅格化处理,那么减少重绘对GPU来说就显得非常重要。减少重绘就是我们重要的优化方案,解决方案有;对于背景色减少层级设置,自定义的空间要用clipRect方法减少绘制,