原文地址:http://riaoo.com/?p=1405

博客园的下载地址(版权归原作者) http://files.cnblogs.com/tianlanliao/CustomRSL.zip

创建运行时共享库(Runtime Shared Library,RSL)并不是什么难事也不是新鲜事了,就是把类定义放到一个swf文件里,其它swf文件在运行时可以共享那些类定义。这样可以防止类定义重复从而减小文件大小。RSL有分带Adobe签名的(例如 Flex framework),也有用户自创建的。带Adobe签名的RSL,假如是swz格式,则可以永久保存在客户端计算机的特定目录下(例如 C:\Documents and Settings\Administrator\Application Data\Adobe\Flash Player\AssetCache)。用户创建的,通常只能是swf格式,只能保存在缓存里。接下来你可以先下载源码看一看,然后继续往后阅读。

下载Flash Builder项目CustomRSL

如上图所示,我在Flash Builder里创建了一个ActionScript 项目,cn.riahome.module 包里的“Libs_RSL.as”已构建为项目的模块,它将被编译为独立的 Libs_RSL.swf 文件(要构建某个*.as文件作为模块,只需“属性->ActionScript 模块->添加”)。这个 Libs_RSL.swf 文件将会存放 cn.riahome.classes 包里所有的类的定义,包括 Adobe 类、Microsoft 类和Sun 类。默认包里的主文件 CustomRSL.as 不需要包含这些类定义(就是不需要 import 那些类),从而减小编译后的 CustomRSL.swf 文件大小。

CustomRSL 类如何使用那些没有 import 的类呢?方法也很简单,只需要把已包含那些类定义的 Libs_RSL.swf 文件加载到 CustomRSL.swf 里,再利用getDefinitionByName()方法取得那些类的引用。注意:加载 Libs_RSL.swf 文件时,必须指明它的应用程序域和CustomRSL.swf的一样,即在加载时,传递给Loader.load()方法的第二个参数为 ApplicationDomain.currentDomain 。关于ApplicationDomain 类的使用,请查看官方的《Adobe ® ActionScript® 3.0编程

说白了,就是把类定义划分到别的 swf 文件里,在需要时加载这个 swf 文件,再利用“反射”取得类的引用。不过,值得特别注意的是:这种方法不易于对加载进来的swf进行垃圾回收。除非你加载了swf文件后,并没有引用过里面的东西,否则整个swf都不会被垃圾回收。

其实,假如你熟悉AS3的“反射”,了解 ApplicationDomain 类,并且对 Loader 类了如指掌,那么你能实现的功能远不止这些。

最新文章

  1. 【Java EE 学习 16 下】【dbutils的使用方法】
  2. 用Path来绘制一些图形
  3. loadrunner做webservice接口之简单调用
  4. Deadline来了,如何按时结题?
  5. 基于Bresenham算法画圆
  6. phpcms v9框架的目录结构分析
  7. java 实例方法和类方法的区别
  8. Codevs1380没有上司的舞会_KEY
  9. 【java】对象克隆protected Object clone() throws CloneNotSupportedException
  10. 清理Windows Serer Backup备份数据生成的卷影副本(DiskShadow命令)
  11. alpha冲刺1/10
  12. 2017 浙大校赛 [Cloned]
  13. OpenEXR-2.2.0在Win7 x64系统下的安装方法
  14. 第十一章 串 (a)ADT
  15. DevExpress WPF入门指南:加载动画的应用
  16. js和java判断值为空的方式
  17. 正则表达式REGEXP
  18. [转]使用QT开发GoogleMap瓦片显示和下载工具
  19. hdu 4903 The only survival
  20. day14生成器

热门文章

  1. hdu 4155 The Game of 31 博弈论
  2. mysql之游标
  3. 【hdu2815-Mod Tree】高次同余方程-拓展BadyStepGaintStep
  4. angularJS之$watch、$digest和$apply方法
  5. ByteArrayInputStream与ByteArrayOutputStrean的使用
  6. java 基本数据类型 回顾
  7. HDU5092——Seam Carving(动态规划+回溯)(2014上海邀请赛重现)
  8. Linux系统文件的隐藏属性
  9. Linux系统管道命令符
  10. Android TabHost中Activity之间传递数据