Android性能优化——UI优化

时间:2022-12-09 18:19:08

1、使用<layout>标签来共享布局

可以把头文件、其他xml公用多的部分抽取到一个xml中,用layout标签实现共享

2、使用<merge>标签来优化布局层数

在使用了include后可能导致布局嵌套过多,多余不必要的layout节点,从而导致解析变慢,不必要的节点和嵌套可通过hierarchy viewer(下面布局调优工具中有具体介绍)或设置->开发者选项->显示布局边界查看。

merge标签可用于两种典型情况:

  • 布局顶结点是FrameLayout且不需要设置background或padding等属性,可以用merge代替,因为Activity内容试图的parent view就是个FrameLayout,所以可以用merge消除只剩一个

  • 某布局作为子布局被其他布局include时,使用merge当作该布局的顶节点,这样在被引入时顶结点会自动被忽略,而将其子节点全部合并到主布局中

3、 使用<viewstub>标签

  • 优点:viewstub标签同include标签一样可以用来引入一个外部布局,不同的是,viewstub引入的布局默认不会扩张,即既不会占用显示也不会占用位置,从而在解析layout时节省cpu和内存

  • 使用场景:viewstub常用来引入那些默认不会显示,只在特殊情况下显示的布局,如进度布局、网络失败显示的刷新布局、信息出错出现的提示布局等

4、去除不必要的嵌套和View节点

  • 首次不需要使用的节点设置为GONE或使用viewstub

  • 使用RelativeLayout代替LinearLayout,因为RelativeLayout性能更优,且可以简单实现LinearLayout嵌套才能实现的布局

5、尽量不要使用整张的大图作为资源文件,尽量使用9path图片

应用图标优先放在mipmap目录下(AndroidStudio环境),其他资源图,.9图应该放在drawable-xxxx下,需要复制到手机sd卡上使用的应放在asset目录

6、用SurfaceView或TextureView代替普通View

SurfaceView或TextureView可以通过将绘图操作移动到另一个单独线程上提高性能,
普通View的绘制过程都是在主线程(UI线程)中完成

7、使用OpenGL绘图

8、尽量为所有分辨率创建资源

减少不必要的硬件缩放,这会降低UI的绘制速度,可借助Android asset studio

9、经常使用布局调优工具Hierarchy Viewer