Android Virtualview:淘宝、天猫 又一个动态化、高性能的UI框架力作

本文详细介绍了Android Virtualview的运作流程,从编译XML界面模板为二进制数据,到客户端加载与解析模板,再到组件视图的加载和业务数据的绑定。探讨了为何要将模板编译成二进制数据以实现动态更新,并展示了整体架构设计和使用教程,揭示了淘宝、天猫高效动态UI的秘密。
摘要由CSDN通过智能技术生成

layoutMarginRight=“8”
layoutMarginTop=“8”
layoutMarginBottom=“8”
layoutWidth=“32”
layoutHeight=“32”/>

// JSON数据
{
“style”: {
“text-align”: “h_center”,
“font-size”: “20”,
“color”: “#FF5000”
},
“title”: “超高性 99.9% 的用户觉得很快”,
“logoUrl”: “https://gw.alicdn.com/tfs/TB1yGIdkb_I8KJjy1XaXXbsxpXa-72-72.png”
}

2.2 编译成二进制数据

2.2.1 具体描述

使用专门的工具virtualview_tools将编写好的XML界面模板编译成二进制数据,编译后的文件的后缀名是.out

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用说明见文章virtualview_tools使用指南

注:为什么通过 XML 编写的业务组件 不直接在客户端里运行使用,而是先进行一次二进制序列化操作?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.2.2 二进制文件描述

借鉴了 Android 系统编译模板文件的思路,格式 & 描述具体如下

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.2.2 编译流程
  • 一个业务组件对应着一份 XML 模板 = 单独编译成二进制数据

编译数据 含除内置字符串资源外 它依赖的所有字符串、表达式资源

  • 编译规则 编译时,模板里涉及的资源包括颜色值、各种枚举、基础组件的类型等都会被序列化映射成整数;不能序列化成整数的资源如字符串,就分配一个索引 Id 指向它 & 将它们单独存储到一块区域里
  1. 原因:当模板在线发布、字符串有变动的情况下,能够不影响原来的字符串资源索引;否则若按照带有顺序约定的协议来分配资源索引,很容易在模板变更时 同一索引值在变更前后指向的资源内容是不一样,影响稳定性和动态性
  2. 序列化的规则如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 编译流程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.3 模板数据 下发到客户端

即 客户端获取编译后的二进制数据

获取有2种路径:

  1. 直接将编译后的模板打包到客户端里,开发者通过代码加载
  2. 框架先发布到模板管理后台,客户端在线更新到模板数据(即实现了动态更新)

流程3:客户端加载界面

  • 客户端获取到编译后的界面模板后,进行加载 & 解析,最终渲染出视图界面
  • 步骤流程如下图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.1 解析模板数据

  • 具体描述 客户端获得编译后的模板数据(二进制数据)后,立即 进行解析
  1. 如校验版本号,合法性,读取头信息等
  2. 客户端渲染组件 从解析 编译后的模板数据开始
  • 流程解析 解析过程 = 二进制编译的逆过程

但解析流程只负责提取原始数据 & 组织格式,并无构建出组件对象

<

  • 26
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值