Android布局优化的几个点

一、概述:

布局优化的方式有很多,使用抽象布局标签(include、ViewStub、merge)、去除不必要的嵌套和View节点、减少不必要的inflate及其他Layout方面可调有点,顺带提及布局调优相关工具(hierarchy viewer和lint)

二、抽象布局标签

<include>标签

  • ​​​​include标签常用于将布局中的公共部分提取出来供其他layout共用,以实现布局模块化,这在布局编写方面提供了大大的便利;
  • 标签唯一需要的属性是layout属性,指定需要包含的布局文件。也可以覆盖引入布局根节点的对应属性。

<viewstub>标签

  • viewstub标签同include标签一样可以用来引入一个外部布局,不同的是,viewstub引入的布局默认不会扩张,既不会占用显示也不会占用位置,从而在解析layout时节省cpu和内存。
  • viewstub常用来引入那些默认不会显示,只在特殊情况下显示的布局,如进度条、网络失败显示的刷新布局、信息出错的提示布局等。
  • 将一个view设置为GONE不会被解析,从而提高layout解析速度,而VISIBLEINVISIBLE这两个可见性属性会被正常解析

<merge>标签

在使用了include后可能导致布局嵌套过多,多余不必要的layout节点,从而导致解析变慢,不必要的节点和嵌套可以通过hierarchy viewer来查看。

该标签可用于以下两种典型情况:

  • 布局顶节点是FrameLayout且不需要设置background或padding等属性,可以用merge代替,因为Activity内容视图的parent view就是个FrameLayout,所以可以用merge消除一个;
  • 某布局作为子布局被其他布局include时,使用merge当作该布局的顶节点,这样引入时顶节点会被自动忽略,而子节点全部合并到主布局中。

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

  1. 首次不需要使用的View可以设置GONE或者用ViewStub代替
  2. 使用RelativeLayout代替LinearLayout,前者性能更好。

三、减少不必要的inflate

  1. 对于inflate的布局可以直接缓存,用全局变量代替局部变量,避免下次需要再次infllate
  2. 如listView提供的item缓存,adapter里的getView中convertView的优化写法,如图:

四、其他点

1.用SurfaceViewTextureView代替普通View

        SurfaceView或TextureView可以通过将绘图操作移动到另一个单独线程上提高性能。它们的绘图操作发生在UI线程之外的另一个线程上。但SurfaceView在常规视图系统之外,所以无法像常规视图那样移动、缩放或旋转。TextureView除了与SurfaceView一样在单独线程绘制外,还可以像常规视图一样被改变。

2.使用RenderJavaScript

        这是一种在3.0时引进的用来在Android上写高性能代码的语言,语法基于C语言的C99标准,他的结构是独立的,所以不需要为不同的CPU或GPU定制代码。

3.使用OpenGL绘图

        Android支持使用OpenGL API的高性能绘图,是Android可用的最高级别的绘图机制。

4.尽量为所有分辨率创建资源

        减少不必要的硬件缩放,这回降低UI的绘制速度。

五、布局调优工具:hierarchy viewer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值