关于Android UI 优化

时间:2021-09-13 06:10:49

之前项目为了同时兼容tv和手机端的UI,使用了百分比布局来动态计算控件的宽高,这种适配方案只关心屏幕的宽高(分辨率),与屏幕的像素密度无关。

在新的项目里也使用了这种方案。但是由于项目的运行硬件计算能力较差,单个界面的布局又比较复杂,在加载布局的时候,LayoutInflator的任务过重,
而LayoutInflator又是阻塞主线程的,所以会导致UI加载慢,甚至UI卡顿。

LayoutInflator通过反射把xml布局文件创建为具体的view对象,而反射的效率比直接new对象要慢3倍。设备性能差,加上布局文件又比较繁重,更是加剧了IO的阻塞。

在之前的博客中也提到过,可以通过异步加载布局的方式(http://www.cnblogs.com/liyilin-jack/p/10282385.html),缓解主线程的阻塞。
另一种方案,是使用new对象的方式替代xml布局的方式,iReader团队推出了x2c的开源库,把xml布局文件在编译器翻译为java布局文件,从而去除通过LayoutInflator反射创建view
的环节,来彻底解决该问题。

x2c框架的问题在于,一方面,对某些布局文件中的属性,尤其是自定义属性不支持,要想使用该框架,只能手动修改其apt部分的源码;另一方面,在编译期无法获取运行时的设备的属性,
如屏幕宽高等信息,导致无法做到UI的动态适配(如百分比适配)。所以,针对x2c框架,必须使用指定的UI适配方案,如美团的dimens适配方案。

总的来说,想把x2c框架引入到现有的项目当中,针对当前的UI布局做性能优化,可用性并不高,甚至需要对框架代码进行修改,这其中的工作量,也是不小的。