HelloWorld


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

  • 其他

EZLippi-浮生志

Anroid性能优化之布局绘制

发表于 2019-07-12 19:00:18 | 分类于 Android | 点击量 819 ℃

 

前提:界面绘制是一个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工具,查看非蓝色部分,就是需要改进的地方。

  • 本文作者: tanbo
  • 本文标题: Anroid性能优化之布局绘制
  • 本文链接: /blog/articles/57
  • 发布时间: 2019-07-12 19:00:18
< APK运行过程
Android性能优化之获取界面绘制时间  >
EZLippi

Tanbo

From Sichuan
Android开发工程师

29 日志
6 分类
6 标签
头像
评论 0
暂无评论
© 2019 - 2020 HelloWorld
由 Hexo 强力驱动
主题 - NexT.Mist | Hosted by Coding Pages