Flash(Flex)对文件下载进度的监控原理分析1

 如果A.swf要能够接收来自FlashPlayer的下载进度信息,A.swf文件中的用来接收信息的一部分代码(事件监听代码)要首先被执行起来才行。也就是说我们把事件监听器代码放到启动类(文档类)的构造函数中,然后该构造函数要被FlashPlayer调用起来。

 

启动类(文档类)的构造函数会被FlashPlayer自动调用,这没有问题,问题是A.swf在还没有被完全下载完毕的情况下,它的启动类(文档类)能够被FlashPlayer启动起来吗?

能。

原因来自于swf文件的结构。

 

 假设我们自定义一种文件类型,该文件内容结构上有如下特点:

1. 从第一个字节开始存放文件内容主体,内容主体又被划分多个部分,每个部分都用特殊符号来标记开始和结束。形式如下:

     <开始标志>XXXXXXXXXX<结束标志><开始标志>YYYYYY<结束标志><开始标志>ZZZZZZ<结束标志>。。。。

2. 用特殊符号标记文件结束。

 

于是该文件内容结构可归纳为:

          <开始标志>XXXXXXXXXX<结束标志><开始标志>YYYYYY<结束标志><开始标志>ZZZZZZ<结束标志><文件结束标志>

 

swf文件的结构类似于上面的假设。

如果启动类的构造函数以及构造函数中使用的各种资源都被编译到第一个<开始标志><结束标志>之间,那么FlashPlayer把第一个开始/结束标志之间的内容下载完之后,就可以启动构造函数了。也就是说此时可以通过构造函数生成进度条,然后接受FlashPlayer传入的进度信息显示在其上。

如果第一个<开始标志><结束标志>之间的代码量很小,只有全部代码量的1%,那么这1%代码的下载时间占整体下载时间的比例很小,用这种方式来显示下载进度就会比较理想。

 

Flex的本质是Flash;Flex就是Flash。

Flash工程师熟悉的两帧预加载技术就是上面描述的内容。

 

Flash(Flex)由帧构成,每一帧被编译后就成为上述的一个<开始标志>XXXXXXXXXX<结束标志>。

Flex由两帧构成,第一帧放置启动类(文档类,它的构造函数被自动调用),通常它被设计的非常轻量,功能是动态生成进度条,设置进度监听器,触发加载RSL等资源。第二帧放置体积大的应用程序主体。

 

参考资料:

=====================================================================

swf文件结构式公开的规范性结构。

对其结构的定义请参考官方文档。这是比较深的一个坑儿,需要花大力气才能深入下去。swf文件源代码的混淆原理源于此。

搜索引擎关键字:swf format

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值