开源项目Flexml 原理介绍分析

1,184 阅读2分钟

用业余时间了解了一个有创意的Android库,这里记录一下我的个人理解。

项目地址:github.com/sanyuankexi…

项目介绍:

基于Litho的Android高性能动态业务容器。

用人类语言解释:

将布局写到xml中,然后动态解析渲染成View, xml可以动态从服务端下载,实现动态业务

技术背景:

litho、dom4j、jexl

实现分析:

facebook的litho库是一个强大的库,它实现了申明式的布局渲染,放弃了android长期以来对xml的依赖。 但他同时又有一个非常大的特征就是他的不可改变性。这种思想来源于react, 他能够简化渲染需要关注面,同时也带来使用上的麻烦。

dom4j: 用于解析xml到dom tree jexl: 让xml能够执行类似lamda表达式、三元运算这种,在静态xml中扩展脚本能力

众所周知, Android中使用Inflater从XML创建View时, 对XML有要求,就是这个XML必须是经过AAPT2工具编译处理过的,其中的引用资源是被指向了资源table中的一个地址, 这样就限制了我们从外部动态加载xml渲染布局

要自己实现这样一个Inflater,就必须自己去处理各种属性,(参见Weex),幸好有Litho这个库,帮我们把大部分控件都实现了。

Flexml的工作流程: 加载raw xml 通过dom4j解析成节点树, 通过节点树生成Litho ComponentTree, 通过设置LithoView的ComponentTree 完成View的渲染。

这里提点意见: 节点树到ComponentTree的过程写的太复杂了,重复性的东西应该交给机器去处理, 建议用注解+动态代理重构。

局限性

只支持简单的事件处理,无法实现复杂的业务逻辑的动态化