Android布局优化



Android布局优化

由于之前有段时间在布局设计上,因此在此做一下总结,看之前可结合我的Android 5大布局,简单的布局不仅简化开发周期,在后期还减少测试和维护的工作量。若将一个布局看作一个树形结构,最好是10层以下布局使用浅而广的扁平化结构代替深而窄的树形结构化设计,例如ImageView和一个TextView,可以使用一个复杂的drawable代替,性能会更好。我们可以做如下优化:

1)合并根框架:假如一个FrameLayout作为一个布局的根视图,不提供背景或者填充,它可以被一个带有<merge/>标志的布局代替。

2)无用的树叶:对于一个扁平结构中一个布局没有孩子,没有背景,可以被删掉。

3)无用的父类:一个布局不是ScrollView或者不是一个根布局,也没有背景,只有一个孩子节点,可以被删掉,孩子节点直接放入到这个扁平的父类里面。

4)深度布局:布局若有太多内嵌,则性能很差。考虑使用RelativeLayout 以及GridLayout等扁平化布局代替。

Android布局原则 

1)尽量多使用LinearLayoutRelativeLayout,不要使用AbsoluteLayout 

2)在布局层次一样的情况下,建议使用LinearLayout代替RelativeLayout,因为LinearLayout性能要稍高一些 

3)将可复用的组件抽出来并通过include标签使用 

4)使用ViewStub标签来加载一些不常用的布局 

5)使用merge标签减少布局的嵌套层次

6)使用requestFocus标签

此外我们还可以使用一些属性和控件来优化布局,使用 style 主题来定义一个通用的属性,从而重复利用代码,减少代码量。使用 LinearLayoutCompat 组件来实现线性布局元素之间的分割线,从而减少了使用View来实现分割线效果。

我们来看一下几个优化布局的标签:

1ViewStub

ViewStub是轻量级的页面,做预加载处理,通常称为懒加载布局,改善页面加载速度和提高流畅性,ViewStub虽然也是View的一种,但是它没有大小,没有绘制功能,也不参与布局,资源消耗非常低,将它放置在布局当中基本可以认为是完全不会影响性能的。ViewStub引入的布局默认不会扩张,既不会占用显示也不会占用位置,从而在解析Layout时节省cpu和内存。但是ViewStub的缺点我们也必须知晓:

  1. ViewStub只能Inflate一次,之后ViewStub对象会被置为空。按句话说,某个被ViewStub指定的布局被Inflate后,就不能够再通过ViewStub来控制它了。所以它不适用于需要按需显示隐藏的情况。

  2.  ViewStub只能用来Inflate一个布局文件,而不是某个具体的View,当然也可以把View写在某个布局文件中。如果想操作一个具体的view,还是使用visibility属性吧。

  3. VIewStub中不能嵌套merge标签。

  4. ViewStub本身不会占用层级,它最终会被它指定的层级取代。

2Merge元素

使用该标签通过删减多余或额外的层级合并UI布局,使用该标签能降低UI布局的嵌套层次。多用于以下场景:

  1. 布局根节点是FrameLayout且不需要设置backgroundpadding等属性,可以使用merge代替。

  2. 某布局作为子布局被其他布局include时,使用merge当做该布局的顶节点,这样再被引入时顶节点会自动被忽略。

使用时应注意几下几点:

  1. merge只能用在布局XML文件的根元素。

  2. 使用mergeinflate一个布局时,必须指定一个ViewGroup作为其父元素,并且要设置inflateattachToRoot参数为true

  3. 不能在ViewStub中使用merge标签,因为ViewStubinflate方法中根本不能设置attachToRoot

3include

include标签将共同的组件抽取出来单独放在一个xml文件中,实现布局重用,提高UI的制作和复用效率,也能保证制作的UI布局更加规整和易维护。

4requestFocus

requestFocus该标签用于制动屏幕内的焦点View,使用很简单,将该标签置于View标签内部

检查布局常用的工具

  1. Android Lint 工具

    AS工具栏中,Analyze—>Inspect Code

2)手机打开设置—->开发者选项—->显示GPU过度绘制

3Hierarchy View

该工具检测布局嵌套层次,在AS 工具栏中点击 Tools–>Android–>AndroidDevice Monitor–>Hierarchy View。当打开给工具后,就会显示可用的设备列表一个这些设备中运行的部分。点击“Load View Hierchy”选项查看被选中部分的布局层次图。之后就是我们上面XML代码的布局了

4layoutopt (Layout Optimization) 工具

 Android SDK 的工具,它可以自动分析你的布局,发现可能不需要的布局元素,降低布局复杂度。它是一个快速易用的 布局分析工具,这工具可以分析所提供的Layout,并提供优化意见。开发者可以有选择的采纳Layoutopt输出的结果。在tools文件夹里面可以找到layoutopt.bat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值