安卓性能优化(1)布局优化

全篇大概如下
简介
工具
1、HierarchyViewer
2、Android Lint
3、Android系统内置的【调试GPU过度绘制】
技巧
include标签
ViewStub标签
merge标签
Space标签
LinearLayout的优化
其他技巧
总结

简介

性能优化必不可少的就是布局优化,布局层次过深,复杂度变大,重复布局增多等问题,引起过度绘制,最终甚至可能引起卡顿,最终影响用户体验,本文简单的介绍一些布局优化的实用工具及技巧。

工具

1、HierarchyViewer
HierarchyViewer工具可以方便的查看Activity的布局,各个View的属性、measure、layout、draw的时间,如果耗时较多会用红色标记,否则显示绿色。
位置:Android SDK/tools/hierarchyviewer.bat
在这里插入图片描述

2、Android Lint
使用Lint对Android工程代码进行扫描和检查,可以发现代码潜在的问题,提醒程序员及早修正。能检查布局性能、未使用到资源、国际化、不一致的数组大小、占用内存的资源及时回收(cursor未关闭)等问题。

3、Android系统内置的【调试GPU过度绘制】
在安卓手机的开发者选项中有【调试GPU过度绘制】的开关,打开之后,手机系统所有界面就会有蓝绿红色的色块框住,代表重复绘制的程度,红色为重复最多,蓝色为最少。

在这里插入图片描述

技巧

include标签
应用的不同界面中会有很多相似或共同的布局,这个时候就需要用到include标签,把重复的布局单独放到一个layout文件中,使用时如下
在这里插入图片描述
ViewStub标签
界面中会存在一些布局,只有在满足了一定条件后才会展示,其他场合都是隐藏状态。一般情况下会使用setVisibility(View.Gone)来控制显隐。同样的场合如果使用ViewStub标签,可以达到同样的目的,并且还不浪费资源。因为ViewStub在初始化后是不会被加载的,只有使用的时候才会加载到内存中。ViewStub所加载的布局是不可以使用标签的。
布局中的使用方法同include类似,代码中的使用如下:
在这里插入图片描述
merge标签
merge标签是在使用了include标签后引入的布局中的最外层使用的,可以减少不必要的layout节点。使用场合:被include引入的布局,使用merge当作该布局的顶节点,这样在被引入时顶结点会自动被忽略,而将其子节点全部合并到主布局中。

Space标签
两个控件中间需要添加间隔,一般情况是使用View,设置高度,透明背景即可。同样的场合使用Space控件,渲染速度更快,因为Space继承自View,且draw()中没有任何代码,这就意味着填充布局的时候不用渲染,简化了布局的填充。

LinearLayout的优化
1.contentView复用
2.引入holder来避免重复的findViewById.
3.分页加载
4.使用divider属性控制两个条目中间的分割线
在这里插入图片描述

其他技巧

1.布局中多次使用inflate填充相同布局时,把局部变量变成全局变量,使用时通过if判断该view是否为空,减少inflate次数

2.用SurfaceView或TextureView代替普通View ,普通View的绘制过程都是在主线程(UI线程)中完成,SurfaceView或TextureView的绘图操作发生在UI线程之外的另一个线程上。 另外SurfaceView在常规视图系统之外,所以无法像常规视图一样移动、缩放或旋转,而TextureView是Android4.0之后引入的,可以移动缩放和旋转。

3.尽量为所有分辨率创建资源,减少不必要的硬件缩放,这会降低UI的绘制速度,可借助Android asset studio

4.使用RelativeLayout代替LinearLayout,可以减少控件的层级深度。

5.尽量不要在嵌套的LinearLayout中都使用weight属性.

6.getWindow().setBackgroundDrawable(null);通过这个代码移除activity默认的背景(DecorView持有)

总结

有问题点击
https://shimo.im/docs/th9Chj6tpcKCXWcD/

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值