2.7 提升动画性能
在打造优秀体验的应用和实现酷炫效果的过程中,动画是不可或缺的重要组成部分。Android平台提供了三个动画框架:帧动画(Frame Animation)、补间动画(Tween Animation)和属性动画(Property Animation)。属性动画在Android 3.0开始支持,开发者使用这些动画框架来实现各种动画效果,这三个框架都有其优势和局限性,要深入了解就需要明白它们的实现原理。
属性动画只有Android API 11(Android 3.0)以上才支持,如果使用11以下的SDK,请导入NineOldAndroids动画库,用法完全一致。
虽然通过动画可以实现很多酷炫的动画,但带来的性能开销也有不同程度的影响。在实现动画的过程中,主要从以下三个纬度来对比性能:
流畅度:流畅度是动画的核心,控制每一帧动画在16ms以内完成。
内存:避免内存泄漏,减小内存开销。
耗电:减小运算量,优化算法,减小CPU占用。
因篇幅所限,本文不从原理上讲解所有动画的具体实现,只简单了解下目前Android系统支持的三种动画实现方式,并且以应用启动动画为例来对比不同动画的实现效果和性能上的开销,这个启动动画由两部分组成:旋转360度和从0到原始尺寸的放大。
2.7.1 帧动画
帧动画很简单,就是将一组图片按顺序显示出来,可以使用AnimationDrawable来定义使用帧动画。但由于帧动画要求图片过多,如果图片较大,内存占用就非常大,效果也比较差,除非图片足够多。所以帧动画是消耗资源最多,效果最差的一种,这里就不再介绍使用方法,能不用就不用。