下载进度 = 已下载字节数 / 总字节数 * 100%
总字节数通常在文件传输之前的协议握手阶段就能知晓;
而已下载字节数则通过开发语言的底层API(文件传输API)可以获得(对于开发者,Flash或Flex变相地通过发布事件向外界透漏这个信息)。
从这个意义上讲,对文件下载的进度进行监控本身是很容易的。
谁在对下载文件的进度进行监控?
FlashPlayer通过URL下载程序A.swf,那么很容易想到:FlashPlayer对A.swf的下载进度进行监控。
我们看到的是沉稳的蓝灰色背景下一个长方形的进度条不停变化。
这个进度条是FlashPlayer提供的吗?
不是,是Flex程序(Flex框架程序)提供的。
奇怪,这么一来似乎是A.swf在对自己的下载进度进行监视,而不是FlashPlayer。
这不是矛盾了吗?
其实,本质上,还是FlashPlayer对A.swf的下载进度进行了监控。
只不过是FlashPlayer首先获知进度信息,然后通过事件机制把进度信息传入到到A.swf中,由A.swf把这些信息显示到自己的进度条中而已。该进度条是Flex框架提供的,被编译到A.swf中。
因此,我们可以自定义进度条来替换Flex框架提供的那个东东,来显示FlashPlayer传入的进度信息(已下载字节数、总字节数)。
该设计够聪明的!