Android启动优化-布局优化
安卓应用开发发展到今天,已经成为一个非常成熟的技术方向,从目前的情况看,安卓开发还是一个热火朝天的发展,但高级人才却相对较少,如今移动互联网的开发者也逐渐开始注重插入技术、性能优化、行业新技术、系统架构等方面的进步。
安卓系统自诞生至今,经历了几次重要更新,最后选择了折中方案,使系统在安装和运行时各项指标都得到了优化,至此,安卓虚拟机的开发过程告终。
Android的启动优化就是性能优化中的一大内容。
说到Android启动优化,你一般会想到什么呢?
今天我们就来了解一下启动优化中的布局优化。
布局优化的现状和发展趋势
时间消耗原因
大家都知道布局装载是一个耗时的重灾区。尤其是启动阶段,作为第一个View的装载,非常耗时。
版面装入的时间很长,原因有二。
l读XML文件,这是一种IO操作。
l分析XML对象,反射创建视图。
普遍的做法是。
l减小布局嵌套层的数量,减少过度绘制。
l无负荷界面、错误界面等不需要加载。
那么,在这些实践之外,我们有什么方法可以优化呢?
解答。
l异步加载
l用编码方式来写布局。
异步加载
很久以前,google就提供了AsyncLayoutInflater,一个异步加载的方案,虽然这个方法有一些缺陷,在下文中讨论。
用编码方式来写布局。
以写布局的方式来编写代码,我们可能会想到使用java声明布局,对于稍复杂一些的布局,这种方式并不可取,有一些问题,比如难以维护,难以修改等等。在github上面,为了解决这个问题,产生了一系列优秀的开源库。
litho: https://github.com/facebook/litho
X2C: https://github.com/iReaderAndroid/X2C
为保留xml的优点,同时解决xml所带来的性能问题,我们开发了X2C方案。也就是说,在编译生成APK的过程中,需要翻译的layout翻译就会生成相应的java文件,这样开发者就可以写出布局或者原始的xml了,但是对于程序来说,运行时装载的是相应的java文件。
在编译过程中,我们使用APT(AnnotationProcessorTool)+JavaPoet技术来完成“注释”->“解注”->“翻译xml”->“生成java”整个过程的操作。
在大型项目中,这两个开源库基本上不会被使用,但它们的价值是可以肯定的,而且它们的核心思想非常重要。
xml布局加载耗时的问题,google也希望改善这一现状,最近Composebeta发布了Composebeta,他使用声明式UI编写布局,避免了xml带来的耗时。此外,还支持实时预览布局。这应是今后的趋势。
总结
以上介绍了布局优化的现状和发展趋势,下面我们一起来看看,有哪些布局优化的方法,可以在项目中应用。
l渐进加载。
l异步加载
l命令声明性UI。