过渡绘制
- 移除布局中不需要的背景,移除Window默认的Background,移除控件中不需要的背景
- 将layout层级扁平化.往往我们在写界面的时候都会使用基本布局来实现,这可能会出现一些性能问题。比如:使用嵌套的LinearLayout可能会导致布局的层次结构变得过深。另外,如果在LinearLayout中使用了layout_weight的话,那么他的每一个子 view都需要测量两次。特别是用在 ListView 和 GridView 时,他们会被反复测量。 布局嵌套过多的话会导致过度绘制,从而降低性能,因此我们需要将布局的层次结构尽量扁平化。
- 使用Layout Inspector去查看layout的层次结构
- 使用嵌套少的布局
- 使用merge标签减少嵌套
- 使用lint来优化布局的层次结构
- 减少透明度的使用.对于不透明的view,只需要渲染一次即可把它显示出来。但是如果这个view设置了alpha值,则至少需要渲染两次。
-
布局方面的优化
使用性能更优的布局
- 在无嵌套布局的情况下,FrameLayout和LinearLayout的性能比RelativeLayout更好。因为RelativeLayout会测量每个子节点两次。
- ConstraintLayout的性能比RelativeLayout更好,推荐使用ConstraintLayout。后面会介绍ConstraintLayout的使用。
- 使用include标签提高布局的复用性
- 使用merge标签减少嵌套
- 使用ViewStub标签延迟加载
- onDraw()中不要创建新的局部变量以及不要做耗时操作
- 复杂嵌套使用ConstraintLayout
参考
那些 Android 程序员必会的视图优化策略
Android性能优化之如何避免Overdraw