将布局加载速度提升200%
通常,在编写页面时,大家都是通过 XML 来编写布局,并通过 setContentView 或 LayoutInflater.from(context).inflate 方法将 XML 布局加载到内存中。
new 的三倍以上我们的团队在这个问题上也探索了很多解决方案。曾经一度走到了另一个极端,完全放弃xml,所有控件都通过java新建,甚至直接在canvas上绘制,这样虽然性能确实提升了,但代码却失去了可读性和可维护性。 后来我们反思,代码到底是给机器看的,还是给人看的??也许X2C已经给了我们一个答案。
为了保留xml的优势并解决其带来的性能问题,我们开发了X2C解决方案。即在编译生成APK的过程中,将需要翻译的布局翻译生成对应的java文件,这样开发者编写布局时仍编写原始的xml,但对于程序而言,运行时加载的是对应的java文件。 我们使用APT(注解处理器工具)+ JavaPoet技术,在编译期间完成整个流程的操作:[注解] -> [解析] -> [翻译xml] -> [生成java]。
在开发集成之后,我们做了一个简单的测试,性能对比如下
| 加载方式 | 频率 | 平均加载时间 |
|---|---|---|
| XML | 100 | 30 |
| X2C | 100 | 11 |
在模块的 build.gradle 文件中添加依赖
annotationProcessor 'com.zhangyue.we:x2c-apt:1.1.2'
implementation 'com.zhangyue.we:x2c-lib:1.0.6'为任何使用该布局的 java 类或方法添加注解。
@Xml(layouts = "activity_main")在模块下创建 X2C_CONFIG.xml 文件,其中定义了
暂无开放 Issues,或尚未同步最近议题。