Android优化一:提纲
Android优化二:性能检测
Android优化三:内存优化
Android优化四:App启动速度优化
Android优化五:布局优化
Android优化六:性能优化
1、减少布局层级
Google在API文档中建议View树的高度不宜超过10层。
以前我们用Eclipse写代码时,自动生成的模板是以LinearLayout为根节点的,但是后面变成了RelativeLayout为根节点。
RelativeLayout可以让视图树的层级少,但是LinearLayout的测量效率要高。
如果使用RelativeLayout,需要尽量避免嵌套;如果使用LinearLayout,保证层级不能太深。
2、<include>标签
<include> 标签并不能减少布局层级,只能增加代码可读性和布局的复用性。
3、<merge>标签
Q:使用merge标签有哪些优点?
<merge />标签可以用于减少View树的层次来优化Android的布局,使用<include>包含布局的时候,系统会自动忽略merge层级。
Q:merge标签有什么缺点么?
1.<merge/>只能作为XML布局的根标签使用。
2.当Inflate以<merge />开头的布局文件时,必须指定一个父ViewGroup,并且必须设定attachToRoot为true。
View android.view.LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot)
Q:什么情况考虑使用Merge标签?
1.子视图不需要指定任何针对父视图的布局属性,例子中TextView仅仅需要直接添加到父视图上用于显示就行。
2.假如需要在LinearLayout里面嵌入一个布局(或者视图),而恰恰这个布局(或者视图)的根节点也是LinearLayout,这样就多了一层没有用的嵌套,无疑这样只会拖慢程序速度。而这个时候如果我们使用merge根标签就可以避免那样的问题。
merge标签的使用:
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="merge标签" />
</merge>
4、<ViewStub>标签
Q:使用ViewStub标签有哪些优点?
<ViewStub>标签可以实现对一个view进行延迟加载,布局在初始化加载不需要显示出来,只有在特点情况才显示出来。
Q:使用ViewStub有啥需要注意的吗?
1.在要渲染的布局中并不支持<merge/>标签。
2.ViewStub.infalte方法不能调用两次,否者会出现异常。(因为一旦ViewStub visible/inflated,则ViewStub将从视图框架中移除,其id也会失效)
Q:ViewStub标签和View.GONE的区别?
ViewStub标签只有在显示时才去渲染整个布局,但是View.GONE在初始化布局时就已经添加在布局树上了。
使用方法:
((ViewStub) findViewById(R.id.viewstub)).setVisibility(View.VISIBLE);
// or
View importPanel = ((ViewStub) findViewById(R.id.viewstub)).inflate();
网友评论