Android动画的优化

优化重于泰山

对于同样机器环境上的应用来说,抛去受CPU、屏幕和系统GUI系统的固有时间消耗外,要实现流畅的动画的核心也就是减少视图Draw的时间。

这里有几点经验可以跟大家分享一下:

  1. 尽量不要在刷新时做耗时操作,必须准备数据,创建图片,图片变换等,数据和图片都应该在之间就加载到内存中,图片变换用canvas的变换来实现。
  2. 同一个界面中多个动画重叠出现时,尽量将动画的刷新过程统一进行刷新,避免频繁的invalidate,尤其是多个动画有时序上的关系时更应该统一。
  3. 尽量使用带有参数的invalidate来刷新,这样可以减少很多运算量。
  4. 合理的环境下使用surfaceview来操作,比如播放视频等,这种刷新耗时比较大的情况。
  5. 开启硬件加速,硬件加速由于采用了显示列表的概念,所以刷新过程也有很大的优化,但是会增加额外的8M内存占用。

    • Animation流畅度
      动画线程中,少做动画外的事情(比如拖动的时候同时做了图片加载,或进度转圈),或用子线程去做这一件事;

      多个View做动画,变成一个View做多个动画,从而减少View Tree递归调用;
      消失的或不在屏幕中的bg,view不绘制,减小绘制面积(bg绘制前用clipRect控制),减小缓存尺寸;

      不要用requestLayout实现动画,用矩阵变换代替,少用clipPath剪切图片;

      不要设置listview的selector;

      动画时间控制在400ms以内;

      利用好硬件加速;

      动画用nineoldandroid或者在实现的时候尽量把动画的绘制都放到一个消息循环里面;

    • Layout加载速度

      简化动画布局(包括view层级和数量),不用的布局可以用viewstub包住在用的时候inflate;

      提前将布局inflate传入,记得处理static引用;

你可能感兴趣的:(android开发)