那些被忽略的UI优化汇总

229 阅读3分钟

前言

只要谈及UI优化,想到的总是16ms,60ftp这些渲染相关的概念,还有使用HierarchyViewer看一些绘制信息,这些都是UI优化需要了解的,但是都比较的难懂难操作。UI优化也有一些简单易修改的操作,因为不复杂,反而经常会被忽略,但是作用却不容小觑。

正文

UI优化应该从力所能及的事情做好,不小看每一个小小的修改。本篇文章写的是在日常开发中就可以做到的优化,从而减少层级绘制,主要是去掉多余的背景和一些标签的使用。

  1. 去掉默认的背景。 当我们使用了Android自带的一些主题时,window会被默认添加一个纯色的背景,这个背景是被DecorView持有的。通常我们在写xml布局时,会给整个页面加上背景色或者背景图片,这种情况下,Window的默认背景就是多余的,但是它依然被Overdraw,带来损耗,因此要去掉Window默认背景。在onCreate()中的setContentView()之后调用 getWindow().setBackgroundDrawable(null);即可去掉。

  2. 子View背景单独设置。 所有的子View都是同一种背景颜色,则建议在根布局统一设置,否则建议尽量在子 View设置相应的背景颜色,这样也更利于后期的维护。

  3. ListView与其Item的背景。 ListView或RecyclerView和其Item的根布局设置背景, 如果Item的颜色都相同,则在ListView统一设置,否则建议在Item中单独设置。

  4. 显示背景色时的设置。 很多时候,View与View之间的间隔需要显示背景色(底色),而View的颜色和背景色(底色)也不一样,为了省事,通常我们就直接在根布局设置背景颜色,这样很容易导致子布局过度绘制。可以用另外一个View去展示这个间隔,设置好相应的颜色。

  5. Fragment和Activity背景色。 Fragment和Activity双重背景 Fragment和Activity的布局,是否重复设置了背景色?建议将背景色设置在Fragment,以免不注意,重复设置背景色。

  6. RelativeLyout和Linerlayout合理选择。 RelativeLyout和Linerlayout选择 如果相同的层级,并且Linerlayout的子View没有使用weight属性,建议使用Linerlayout。Linerlayout使用后导致层级加深,则建议使用RelativeLyout。尽量不要嵌套使用RelativeLayout,尽量不要在嵌套的LinearLayout中都使用weight属性.Layout的选择, 以尽量减少View树的层级为主.

  7. merge,include,ViewStub标签的使用。 merge和include标签一般是配合使用,ViewStub是相当于是占位符。

  8. ImageView的背景设置。 ImageView在有图片加载的时候,去掉背景,当没有图片的时候,才设置背景,写代码时做个判断。

  9. ViewPager和Fragment搭配使用时的显示。 ViewPager和Fragment搭配使用的时候,Fragement的显示最好用Inflat的形式,比setVisible要好。

  10. selector的时候 selector的使用,有时候可以简化很多操作。

  11. 使用styles。 当有多个组件有相似的属性时,可以使用styles,复用样式定义;

  12. 定义drawable来替代图片资源的使用。 通过定义drawable来替代图片资源的使用,降低内存消耗;

以上的12项需要灵活运用,特别是背景色的设置,根据设计图去灵活应用,都是以减少过度绘制为目标。简单的东西不一定没有用,优化往往就是和几秒钟做斗争,这些不需要工具检查就可以做好的地方,为什么不检查一下呢?