接着上面的View优化的建议与方式
2.2.推荐使用标签或控件:
2.2.1.使用<include/>标签:
- 使用 <include/> 标签加载布局,<include/> 标签可以重复利用布局,来减少代码量,使布局代码整洁易读。如写一个titlebar的布局,然后在需要它的布局中用该标签引入;
- 布局文件较大时可将布局文件按一定结构分解开来,用<include/> 引入。
2.2.2.使用<merge />标签
使用<merge />可减少布局元素,优化布局层级。如果布局的根节点没有提供背景,留白之类的属性,可使用<merge />替换。<merge />标签极其有用。然而它也有以下两个限制:
1)<merge />只能作为XML布局的根标签使用
2)当Inflate以<merge />开头的布局文件时,必须指定一个父ViewGroup,并且必须设定attachToRoot为true,可参看Android系统源码inflate(int, android.view.ViewGroup, Boolean)方法。
View优化_使用Merge。查看使用前后布局变化:
2.2.3.使用ViewStub控件
使用懒加载布局ViewStub,在需要时再对View进行inflate操作, 减少内存的占用;
2.3.好的布局与差的布局对比:
- 好的布局:
- 精简的布局,尽可能少的View对象,Hierarchyviewer工具查看时无繁杂冗余的View对象
- GPU绘制次数尽可能的少, 显示GPU过度绘制时界面中蓝色和绿色区域偏多
- 差的布局:
- 定义的View过多,占用较多内存空间,Hierarchyviewer工具查看时有繁杂冗余的View对象
- GPU绘制次数过多,造成系统资源浪费,显示GPU过度绘制时界面中一片红
3,开发过程中的优化方案
1.常用控件封装好成类文件或布局文件,方便复用.
- Style的name命名中要包含颜色值、字体大小、线的宽度等不易查看记忆的信息,以方便查找复用, 如 <style name="text_666666_15sp">
- 字符串写在strings.xml中, 尽量不要写在代码及布局文件中;
- Colors.xml中定义的颜色值要在其name中体现,方便查找复用, 如
<color name="color_88ffffff">#88ffffff</color> - 常用Dip值也可统一定义到dimens.xml中;
- 自定义的一些drawable等控件中注释中写明控件特征,如button用的selecter中的颜色值,边框宽度是否圆角等信息;
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
...... - View隐藏时看需求是使用gone还是invisible, 优先使用gone。
INVISIBLE和GONE的主要区别是:
为INVISIBLE时,界面上控件不显示, 但保留了view控件所占有的空间;
为GONE时,界面上控件不显示, 且不保留view控件所占有的空间;
8.布局文件命名时遵循前缀表明类型的习惯,形如type_foo_bar.xml。例如: fragment_contact_details.xml,
view_primary_button.xml,
activity_main.xml.
4,优化原则
多从系统源码原理角度考虑,优化布局及view相关代码,提高系统性能。
时间换空间: 内存不足,不能直接获取全部的数据,只能多花时间,一段一段的获取数据并显示;
时间换时间: 开机优化, 开机的服务要启动,应用程序要启动加载;
空间换空间: 大数据的交换和存储;
空间换时间: 手机内存缓存,SD卡缓存。