1.XModeEngine是什么
XModeEngine设计目标是为实现布局中的某块视图区域能够根据自定义脚本创建界面视图并且能够做相应的事件处理。
2.XModeEngine实现思考
2.1 脚本设计
2.1.1 动态执行思考
为了实现动态执行,考虑到两种执行方式:一种是通过动态加载jar以及资源文件;另一种是通过解释型语言来实现,例如javascript、lua等。
第一种方式虽然易于实现,但仍然需要编译器编译,制作相对来说比较复杂,开放制作工具后很可能会导致安全问题。
第二种方式通过解释执行方式,这种方式相对来说限制性比较大,只需文本编辑器便能修改功能,当然效率会低于第一种,不过对于帧率不高的锁屏等需求来讲以及足够了。
基于两种方式的安全性、实现难度考虑,最终选择第二种解释执行方式。
2.1.2 布局与脚本
脚本解释执行方式可分为布局与脚本分离、布局元素中嵌入脚本两种。
前者如魔兽争霸中MPQ文件将执行脚本作为独立资源,或如HTML文件与JS文件相互配合;后者如小米百变锁屏实现MAML(MAML参见http://wiki.dev.xiaomi.com/index.php?title=MAML%E6%95%99%E7%A8%8B),将脚本行为嵌入到布局中。
这里将选择第一种方式。对于MAML这种对布局元素进行标记的方式,虽然容易实现脚本,但扩展性差,不适合除锁屏外其它地方使用。
2.2 框架设计
为达到这个目标,XModeEngine被设计为一种脚本引擎,它能够动态加载脚本与图片等相关资源,然后经过解析、渲染等步骤后动态生成视图。XModeEngine同时能够根据外部传入触屏等系统事件来执行脚本中定义的行为,例如显示图片、解锁等操作。
XModeEngine应用实现分为三部分:
- 基于XModeEngine的APP应用,它分为用于显示视图效果的SurfaceView子类XModeSurfaceView、以及XModeEngine事件侦听器两部分。
- XModeEngine脚本引擎,它实现了脚本解析器、渲染器、事件接收器、事件触发器几部分功能。
- 脚本资源包,它包含了渲染器需要的脚本以及相关的图片资源等。
结构如下图:
3.总结
本文描述了XModeEngine设计目的以及整体设计思想。