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