过渡绘制

  1. 移除布局中不需要的背景,移除Window默认的Background,移除控件中不需要的背景
  2. 将layout层级扁平化.往往我们在写界面的时候都会使用基本布局来实现,这可能会出现一些性能问题。比如:使用嵌套的LinearLayout可能会导致布局的层次结构变得过深。另外,如果在LinearLayout中使用了layout_weight的话,那么他的每一个子 view都需要测量两次。特别是用在 ListView 和 GridView 时,他们会被反复测量。 布局嵌套过多的话会导致过度绘制,从而降低性能,因此我们需要将布局的层次结构尽量扁平化。
    1. 使用Layout Inspector去查看layout的层次结构
    2. 使用嵌套少的布局
    3. 使用merge标签减少嵌套
    4. 使用lint来优化布局的层次结构
  3. 减少透明度的使用.对于不透明的view,只需要渲染一次即可把它显示出来。但是如果这个view设置了alpha值,则至少需要渲染两次。
  4. 减少自定义View的过度绘制,使用clipRect()

    布局方面的优化

  5. 使用性能更优的布局

    1. 在无嵌套布局的情况下,FrameLayout和LinearLayout的性能比RelativeLayout更好。因为RelativeLayout会测量每个子节点两次。
    2. ConstraintLayout的性能比RelativeLayout更好,推荐使用ConstraintLayout。后面会介绍ConstraintLayout的使用。
  6. 使用include标签提高布局的复用性
  7. 使用merge标签减少嵌套
  8. 使用ViewStub标签延迟加载
  9. onDraw()中不要创建新的局部变量以及不要做耗时操作
  10. 复杂嵌套使用ConstraintLayout

    参考

    那些 Android 程序员必会的视图优化策略
    Android性能优化之如何避免Overdraw