原文地址: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 类了如指掌,那么你能实现的功能远不止这些。

[转]就这样,创建了自己的运行时共享库(RSL)的更多相关文章

  1. 此编译单元不包含在frame元数据中指定的factoryClass,无法加载配置的运行时共享库

    警告:此编译单元不包含在frame元数据中指定的factoryClass,无法加载配置的运行时共享库.要在没有运行时共享库的情况下进行编译,请将 -static-link-runtime-shared ...

  2. 运行时动态库:not found 及介绍-linux的-Wl,-rpath命令

    ---此文章同步自我的CSDN博客--- 一.运行时动态库:not found   今天在使用linux编写c/c++程序时,需要用到第三方的动态库文件.刚开始编译完后,运行提示找不到动态库文件.我就 ...

  3. 转: gcc 指定运行时动态库路径

    gcc 指定运行时动态库路径 Leave a reply 由于种种原因,Linux 下写 c 代码时要用到一些外部库(不属于标准C的库),可是由于没有权限,无法将这写库安装到系统目录,只好安装用户目录 ...

  4. Linux 指定运行时动态库路径【转】

    转自:http://www.cnblogs.com/cute/archive/2011/02/24/1963957.html 众所周知, Linux 动态库的默认搜索路径是 /lib 和 /usr/l ...

  5. 拎壶学python3-----(5)pycharm解决运行时少库的问题

    有时候我们运行的时候会出现如下现象 no module named requests怎么办呢? 点击设置: 安装成功后会显示如下: 怎么进行安装呢? 然后退出再运行: 发现已经没有缺少requests ...

  6. Java 9 揭秘(7. 创建自定义运行时映像)

    Tips 做一个终身学习的人. 在第一章节中,主要介绍以下内容: 什么是自定义运行时映像和JIMAGE格式 如何使用jlink工具创建自定义的运行时映像 如何指定命令名称来运行存储在自定义映像中的应用 ...

  7. 框架原理第三讲,RTTCreate,运行时类型创建.(以MFC框架讲解)

    框架原理第三讲,RTTCreate,运行时类型创建.(以MFC框架讲解) 通过昨天的讲解,我们已经理解了运行时类型识别是什么. 比如  CObject * pthis = (Cobject *)Cre ...

  8. Qt 共享库(动态链接库)和静态链接库的创建及调用

    前言: 编译器 Qt Creator, 系统环境 win7 64 位 1.创建共享库: 新建文件或项目->选择 Library 和 c++ 库->选择共享库->下一步(工程名为 sh ...

  9. linux 运行时加载不上动态库 解决方法(转)

    1. 连接和运行时库文件搜索路径到设置     库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的.一般 Linux 系统把 /lib 和 /usr ...

随机推荐

  1. [你必须知道的.NET]第二十九回:.NET十年(上)

    发布日期:2009.05.08 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. /// <summary> /// 本文部分内容,已 ...

  2. Junit单元测试学习笔记一

    我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这一小部分功能是正确的.但是,我们同时应该确保每一个函数 ...

  3. ios开发--tcp/ip

    简介 该篇文章主要回顾--TCP/IP协议族中的TCP/UDP.HTTP:还有Socket.(--该文很干,酝酿了许久!你能耐心看完吗?) 我在这个文章中,列举了常见的TCP/IP族中的协议,今天主角 ...

  4. Android 去掉title bar的3个方法

    1. Java代码实现 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstance ...

  5. 机器人学 —— 机器人感知(Kalman Filter)

    对于机器人感知任务而言,经常需要预判物体的运动,保证机器人在物体与自身接触之前进行规避.比如无人机与障碍物的碰撞,足球机器人判断足球的位置.预判的前提是对当前状态进行准确的估计,比如足球的速度,障碍物 ...

  6. Myeclipse 自定义代码自动格式化(ctrl+alt+F)

    打开如图界面:preference->java->code style->formatter下的edit... 如设设置java代码多长换行:

  7. 程序员必须知道的几个国外IT网站

    1.TheServerSide 这是一个老牌的IT信息网站,从名称上你就能看出,它是关注服务器端编程的,以Java和Java周边信息为主,不过最近它也有向客户端和微软产品扩展的趋势.这个网站最初是以免 ...

  8. 从SDE库文件手工删除SDE图层(转载)

    转载自:http://gis-conquer.blog.sohu.com/164467560.html 一.前言    虽然Catalog能解决这种问题,但是在特殊情况下也许这种方法有点用途.    ...

  9. poj - 3225 Roadblocks(次短路)

    http://poj.org/problem?id=3255 bessie 有时会去拜访她的朋友,但是她不想走最快回家的那条路,而是想走一条比最短的路长的次短路. 城镇由R条双向路组成,有N个路口.标 ...

  10. easyui validatebox 验证集合

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <script src="easyui ...