Anroid性能优化之布局绘制

本文探讨了界面绘制过程中的性能瓶颈,如IO操作、反射、重绘及层级过多等问题,并提出了三种优化方案:使用AsyncLayoutInflater异步加载布局,利用X2C库在编译期将XML转换为Java代码,以及采用ConstraintLayout减少层级和避免重绘。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提:界面绘制是一个IO过程,将资源映射到内存中,同时也是通过反射进行操作,这就导致速度变慢,如果布局不得当存在重绘或者层级过多,也会导致绘制变慢,因为绘制是一个自上而下的过程,层级太多那么时间就会变长。

优化方式:

1、使用AsyncLayoutInflater 异步加载,但是注意这个方式有些限制问题,比如:不能设置LayoutInflater.Factory,高低版本兼容,不能进行主线程操作等,在我们实际使用过程中需要对这个类进行自定义。

大致操作逻辑是:AsyncLayoutInflater 加载完毕后回调一个view给主线程,主线程再去使用这个view,这样提高了响应速度。

使用方式非常简单:

 new AsyncLayoutInflater(MainActivity.this)
                .inflate(R.layout.main_layout, null, new AsyncLayoutInflater.OnInflateFinishedListener() {
                    @Override
                    public void onInflateFinished(View view, int resid, ViewGroup parent) {
                        setContentView(view);
                    }
                });

这个类代码比较少,但是他是一个final类,所以定制时需要将它复制出来后再进行修改即可,它的源码分析请谷歌百度。

2、X2C库,在APT编译期将xml转成java代码执行,通过注解的方式进行操作。关于这个控件需要注意的是xml个别标签它是不支持的,也要注意高低版本系统兼容,可通过修改代码进行完善。

git地址:https://github.com/iReaderAndroid/X2C/blob/master/README_CN.md

 

系统控件版本高低兼容,以TextView为例,可以修改源码中的tv为AppCompatTextView.

3、层级过多和重绘

在xml中去减少层级可使用ConstraintLayout 进行约束

重绘可开启GPU工具,查看非蓝色部分,就是需要改进的地方。

---------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值